欢迎光临
我们一直在努力

在 Serilog 中输出当前线程信息

在使用 log4net 时,我们可以使用 [%thread] 占位符输出当前线程信息。该信息在多线程程序开发中非常有用,但 Serilog 并未提供用于输出当前线程信息的方式,我们需要自定义一个 Enricher 才可以实现。

在引用了 Serilog 的项目中新增一个 ThreadIdEnricher 类文件,内容如下:

    using Serilog.Core;
    using Serilog.Events;
    using System.Threading;
    public class ThreadIdEnricher : ILogEventEnricher
    {
        public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
        {
            logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(
                "ThreadId", Thread.CurrentThread.ManagedThreadId.ToString("D4")));
        }
    }

在配置 Serilog 时,需要将 ThreadIdEnricher 加入到配置中,并添加占位符:

        private static void CreateLog()
        {
            // 配置 Serilog 
            Log.Logger = new LoggerConfiguration()
                .Enrich.FromLogContext()
                .Enrich.With<ThreadIdEnricher>()
                // 配置日志输出到控制台
                .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] [{ThreadId}] {Message:lj}{NewLine}{Exception}")
                // 创建 logger
                .CreateLogger();
        }

输出 Hello World 时,效果如下:

可以看到,控制台中输出了当前线程的 ID 信息。

以上完整代码可以在 https://gitee.com/coderbusy/demo/tree/master/serilog-thread-id-enricher 中找到。

赞(1) 打赏
未经允许不得转载:码农很忙 » 在 Serilog 中输出当前线程信息

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏