SiemensS7数采五(SerilogService及LoggerConfig)

目录

一 资源

二 上一章回顾

三 需求分析

四 创建SerilogService服务

1 实现ISerilogService接口

2 方法具体实现

五 定义LoggerConfig

1 声明Serilogservice字段

2 定义Configure()方法

六 总结

七 下章预告


一 资源

Serilog

这是Serilog官网


二 上一章回顾

一 资源

二 上一章回顾

三 需求分析

四 项目配置

1 创建项目

2 添加PLCModel引用

3 添加Serilog引用

五 定义ISerilogService接口

创建ISerilogService接口类

六 总结

七 下章预告


三 需求分析

我们定义了日志接口方法,现在我们需要定义Serilogservice实现接口,并实现其相应接口方法,这里我们是通过封装Serilog本身的Log静态类的日志方法来实现的


四 创建SerilogService服务

1 实现ISerilogService接口

创建Service文件夹,新建Serilogservice类,并实现ISerilogService接口

    public class SerilogService : ISerilogService

2 方法具体实现

这里我们具体实现了ISerilogService接口中定义的Info、Warn、Err方法,具体是通过封装Serilog包中Log静态类的Information、Warning、Error方法


五 定义LoggerConfig

在CollectData主程序中,我们调用了SerilogDLL.Config.LoggerConfig.Configure方法,接下来让我们一起去实现。

  1. 新建Config文件夹
  2. 其下新建LoggerConfig类
  3. 声明Serilogservice字段
  4. 定义Configure()方法

1 声明Serilogservice字段

        private static SerilogService _logger;

2 定义Configure()方法

这里我们定义静态Configure方法,并在其中调用LoggerConfiguration方法初始化Logger配置,如下依次是:

  1. 日志记录的最小等级为Debug
  2. 反序列化最大深度为3
  3. 反序列化转化具体格式(这里我是展开电气实体类到每个属性,简单实体默认全部展开,复杂实体必须显示指定,否则按默认策略反序列化出的日志仅包含实体名而无具体属性)
  4. 控制台接收器配置
  5. log文件接收器配置
  6. Json文件接收器配置

这里我们主要讲解控制台接收器配置和log文件接收器配置

        public static void Configure()
        {
            Serilog.Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Destructure.ToMaximumDepth(3)  // 展开对象至3层深度
                .Destructure.ByTransforming<DQData>(dqd => new {
                    dqd.SlabID,
                    dqd.L3ID,
                    dqd.SteelGrade,
                    dqd.Len,
                    dqd.Wid,
                    dqd.Thk,
                    dqd.EntrySignal,
                    dqd.TappingSignal,
                })
                .WriteTo.Console(
                theme: AnsiConsoleTheme.Code,
                outputTemplate: "[{Timestamp:HH:mm:ss +08:00} {Level:u3}]{SourceContext}{Message:lj}{Properties}{NewLine}{Exception}")
                .WriteTo.File(path: "Serilogs/.log",
                rollingInterval: RollingInterval.Day,
                retainedFileCountLimit: 7,
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss +08:00} [{Level:u3}]{SourceContext}{Message:lj}{Properties}{NewLine}{Exception}")
            //结构化日志支持
            .WriteTo.File(path: "Serilogs/.json",
                formatter: new CompactJsonFormatter(),
                rollingInterval: RollingInterval.Day,
                retainedFileCountLimit: 7)
                .CreateLogger();

            AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
            {

                _logger.Error((Exception)e.ExceptionObject, "未处理的全局异常");
            };
        }

六 总结

以上我给大家介绍需求分析。创建Serilogservice服务、定义LoggerConfig类、实现Configure方法等内容。


七 下章预告

下一章我会教大家详细解析Configure方法中反序列化策略和接收器配置。


博主RaymondLeigh:如果您觉得本文为您提供了结局思路或解决了您的实际问题,麻烦您🙏帮忙点赞、收藏、评论、关注一键四连,您的举手之劳将为我写作提供动力源泉!🤞

print('Hello,RaymondLeigh!')  # 每日问候,跟大家问好!

🔥精品框架专栏:Prism专栏 WPF专栏 


🌞精品前端UI设计专栏:MaterialDesign专栏


💾精品数据库专栏:SqlServer专栏 EFCore专栏 


💻精品程序开发专栏  VisualStudio专栏


💻精品后端专栏 Scoket专栏  SiemensS7数采

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值