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();
}
}
///
/// Serilog日志添加线程ID
///
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");
}
}
///
/// 在日志中添加线程ID
///
///
///
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));
}
}
}