.NET 6 使用SeriLog日志类

先引入Nuget包如下五个:
1、Serilog
2、Serilog.Sinks.Async
3、Serilog.Sinks.Console
4、Serilog.Sinks.EventLog
5、Serilog.Sinks.File

新建一个SeriLogHelper类

public class SeriLogHelper
{
    /// <summary>
    /// 这段代码实现了一个使用 Serilog 记录日志的类 Logger。该类通过使用 Serilog 的 ILogger 和 LoggerConfiguration 实现了自定义的日志记录选项。在此基础上,Logger 还提供了一个 AppendLog 方法,可以将指定的日志消息添加到日志记录器中,并将其写入到日志文件中。同时,Logger 支持多进程共享日志文件,以解决多进程并发写入日志文件的问题。通过这些功能,Logger 类可以实现高效、可靠、线程安全的日志记录,并能够满足复杂的应用程序日志记录需求。
    /// </summary>
    public class Logger
    {
        private ILogger logger;

        /// <summary>
        /// 实例化ILogger
        /// </summary>
        /// <param name="ProjectName">该实例保存文件夹名称</param>
        public Logger(string ProjectName)
        {
            // 为每个线程创建独立的日志记录器,日志文件夹以项目名称命名
            logger = new LoggerConfiguration()

                .MinimumLevel.Debug() // 设置最低日志级别
                .MinimumLevel.Override("System", LogEventLevel.Information)
                .WriteTo.Console()    // 输出日志到控制台
                .WriteTo.EventLog("Application", restrictedToMinimumLevel: LogEventLevel.Warning)//将日志写入 Windows 事件日志
                .WriteTo.Logger(Ic => ConfigureSerilog(Ic, ProjectName))
                // 输出日志到文件,文件名中包含线程 ID
                .CreateLogger();// 构造日志记录器
        }

        /// <summary>
        /// 日志配置
        /// </summary>
        /// <param name="loggerConfiguration"></param>
        /// <param name="ProjectName"></param>
        public void ConfigureSerilog(LoggerConfiguration loggerConfiguration, string ProjectName)
        {
            loggerConfiguration
                .WriteTo.Logger(config => config
                .WriteTo.Async(a => a//异步写入
                    .File(
                        "SeriLog/" + ProjectName + "/.txt",
                        // 设置日志输出到文件中,文件名按天滚动,文件夹名称为日期加小时
                        rollingInterval: RollingInterval.Day,
                        rollOnFileSizeLimit: true,// 设置为 true,表示启用日志文件大小限制,当日志文件达到设定的大小后,会自动滚动到新的文件中。
                        fileSizeLimitBytes: 10_000_000, //设置每个日志文件的最大大小,单位是字节。这里的值是 10MB,即 10_000_000 字节。
                        retainedFileCountLimit: 200,//设置保留的日志文件数量上限,这里是 200,即最多保留最新的 200 个日志文件。
                        retainedFileTimeLimit: TimeSpan.FromDays(7),//设置日志文件的最长保留时间,这里是 7 天。
                        shared: true, // 多进程共享文件
                                      // 设置日志输出模板,包括时间戳、日志级别、日志消息、日志来源和异常信息
                        outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {NewLine}{Exception}"
                    )
            ));
        }

        /// <summary>
        /// 新增日志
        /// </summary>
        /// <param name="message">日志信息</param>
        /// <param name="logLevel">日志级别</param>
        public void AppendLog(string message, LogLevel logLevel = LogLevel.Info)
        {
            switch (logLevel)
            {
                case LogLevel.Info:
                    logger.Information(message);
                    break;
                case LogLevel.Warning:
                    logger.Warning(message);
                    break;
                case LogLevel.Error:
                    logger.Error(message);
                    break;
                case LogLevel.Debug:
                    logger.Debug(message);
                    break;
                case LogLevel.Fatal:
                    logger.Fatal(message);
                    break;
            }
        }
    }

    /// <summary>
    /// 日志级别
    /// </summary>
    public enum LogLevel
    {
        Info, Warning, Error, Debug, Fatal
    }
}

调用实例如下

SeriLogHelper.Logger serilog1 = new SeriLogHelper.Logger("serilogInfo");
SeriLogHelper.Logger serilog2 = new SeriLogHelper.Logger("serilog1");
SeriLogHelper.Logger serilog3 = new SeriLogHelper.Logger("serilog2");
SeriLogHelper.Logger serilog4 = new SeriLogHelper.Logger("serilog3");

serilog1.AppendLog($"启动服务成功");
Task.Factory.StartNew(() =>
{
    serilog2.AppendLog($"线程日志1开始");
    for (int k = 0; k < 5; k++)
    {
        serilog2.AppendLog($"【线程{Task.CurrentId}】这是第{k}条日志消息");
    }
    serilog2.AppendLog($"线程日志1结束");
}, TaskCreationOptions.LongRunning);
Task.Factory.StartNew(() =>
{
    serilog3.AppendLog($"线程日志2开始");
    for (int k = 0; k < 5; k++)
    {
        serilog3.AppendLog($"【线程{Task.CurrentId}】这是第{k}条日志消息");
    }
    serilog3.AppendLog($"线程日志2结束");
}, TaskCreationOptions.LongRunning);
Task.Factory.StartNew(() =>
{
    serilog4.AppendLog($"线程日志3开始");
    for (int k = 0; k < 5; k++)
    {
        serilog4.AppendLog($"【线程{Task.CurrentId}】这是第{k}条日志消息");
    }
    serilog4.AppendLog($"线程日志3结束");
}, TaskCreationOptions.LongRunning);

serilog1.AppendLog($"停止服务成功");

作者:是孤千羽吖!
转载请加上原文地址:https://blog.csdn.net/qianjue427/article/details/130839818?spm=1001.2014.3001.5502

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值