| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | using Serilog;using Serilog.Core;using Serilog.Events;using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks;public static class SerilogHelper{    public static void BuildLogger(bool usePID)    {        string outputTemplate;        if (usePID)            outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][PID={PID}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";        else            outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";        Serilog.Log.Logger = new Serilog.LoggerConfiguration()            .Enrich.FromLogContext()            .Enrich.With(new SerilogEnricher(usePID))            .WriteTo.Console(outputTemplate: outputTemplate)            .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Information)                .WriteTo.File("Logs\\Info\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))            .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Warning)                .WriteTo.File("Logs\\Warning\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))            .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Error)                .WriteTo.File("Logs\\Error\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))            .CreateLogger();    }}/// <summary>/// Serilog日志添加线程ID/// </summary>public class SerilogEnricher : ILogEventEnricher{    private bool useProcessId;    private string PID;    public SerilogEnricher(bool useProcessId = false)    {        this.useProcessId = useProcessId;        if (useProcessId)        {            this.PID = Process.GetCurrentProcess().Id.ToString("D5");        }    }    /// <summary>    /// 在日志中添加线程ID    /// </summary>    /// <param name="logEvent"></param>    /// <param name="propertyFactory"></param>    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)    {        logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(          "ThreadId", Thread.CurrentThread.ManagedThreadId.ToString("D3")));        if (useProcessId)        {            logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("PID", PID));        }    }}
 |