C#-根据日志等级进行日志的过滤输出

坚持记录实属不易,希望友善多金的码友能够随手点一个赞。
共同创建氛围更加良好的开发者社区!
谢谢~

概要

方便后期对软件进行维护,需要在一些关键处添加log日志输出,但时间长了之后会比较占用磁盘的内存;由于Log定义了不同的等级,因此可以根据等级来控制Log的具体磁盘写入。
主要通过【Serilog.Core.LoggingLevelSwitch】来控制日志的输出,前提是日志写入也是用该命名空间下的ILog进行写入。
LoggingLevelSwitch类
ILogger接口

具体实施

创建Log系统

		 /// <summary>
        /// 用来改变系统Log的输出日志等级
        /// </summary>
        public LoggingLevelSwitch LogLevelSwitch { get; private set; } = new LoggingLevelSwitch(Serilog.Events.LogEventLevel.Verbose);
        /// <summary>
        /// 创建日志系统,记录系统中发生的事件.
        /// </summary>
        private ILogger buildLogService()
        {
            var basepath = "存储的路径";

            //使用系统的Log开关来控制LogLevelSwitch类
            var levelSwitcher = LogLevelSwitch;

            Log.Logger = new LoggerConfiguration()
            //控制最小输出日志
              .MinimumLevel.ControlledBy(levelSwitcher)
              .WriteTo.Logger(lc => lc
              //此处的Fatal和Error写在一个文件中
                  .Filter.ByIncludingOnly(v => v.Level == Serilog.Events.LogEventLevel.Error || v.Level == Serilog.Events.LogEventLevel.Fatal)
                  .WriteTo.File(
                          Path.Combine(basepath, "error-.txt"),
                          rollingInterval: RollingInterval.Day,
                          rollOnFileSizeLimit: true,
                          encoding: System.Text.Encoding.UTF8,
                          retainedFileCountLimit: 10,
                          fileSizeLimitBytes: 1024 * 1024))
              .WriteTo.Logger(lc => lc
                  .Filter.ByIncludingOnly(v => v.Level == Serilog.Events.LogEventLevel.Information)
                  .WriteTo.File(
                          Path.Combine(basepath, "info-.txt"),
                          rollingInterval: RollingInterval.Day,
                          rollOnFileSizeLimit: true,
                          encoding: System.Text.Encoding.UTF8,
                          retainedFileCountLimit: 10,
                          fileSizeLimitBytes: 1024 * 1024))

               .WriteTo.Logger(lc => lc
                  .Filter.ByIncludingOnly(v => v.Level == Serilog.Events.LogEventLevel.Warning)
                  .WriteTo.File(
                          Path.Combine(basepath, "warning-.txt"),
                          rollingInterval: RollingInterval.Day,
                          rollOnFileSizeLimit: true,
                          encoding: System.Text.Encoding.UTF8,
                          retainedFileCountLimit: 10,
                          fileSizeLimitBytes: 1024 * 1024))

                .WriteTo.Logger(lc => lc
                  .Filter.ByIncludingOnly(v => v.Level == Serilog.Events.LogEventLevel.Debug)
                  .WriteTo.File(
                           Path.Combine(basepath, "debug-.txt"),
                           rollingInterval: RollingInterval.Day,
                           rollOnFileSizeLimit: true,
                           encoding: System.Text.Encoding.UTF8,
                           retainedFileCountLimit: 10,
                           fileSizeLimitBytes: 1024 * 1024))

              .WriteTo.Logger(lc => lc
                  .Filter.ByIncludingOnly(v => v.Level == Serilog.Events.LogEventLevel.Verbose)
                  .WriteTo.File(
                           Path.Combine(basepath, "verbose-.txt"),
                           rollingInterval: RollingInterval.Day,
                           rollOnFileSizeLimit: true,
                           encoding: System.Text.Encoding.UTF8,
                           retainedFileCountLimit: 10,
                           fileSizeLimitBytes: 1024 * 1024))
              //写入日志系统
              .WriteTo.MAStorageSink()

              .CreateLogger();

            return Log.Logger;
        }

动态修改日志等级


        /// <summary>
        /// 更新LogLevel设置.
        /// </summary>
        /// <param name="logLevel"></param>
        public void ResetLoggingLevel(LogEventLevel logLevel)
        {
        	//直接修改其MinimumLevel 属性即可
            LogLevelSwitch.MinimumLevel = logLevel;

            AppConfig.LogLevel = logLevel.ToString();

            SaveAppConfig();
        }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默九思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值