SerilogHelper.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Serilog;
  2. using Serilog.Core;
  3. using Serilog.Events;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. public static class SerilogHelper
  11. {
  12. public static void BuildLogger(bool usePID)
  13. {
  14. string outputTemplate;
  15. if (usePID)
  16. outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][PID={PID}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";
  17. else
  18. outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";
  19. Serilog.Log.Logger = new Serilog.LoggerConfiguration()
  20. .Enrich.FromLogContext()
  21. .Enrich.With(new SerilogEnricher(usePID))
  22. .WriteTo.Console(outputTemplate: outputTemplate)
  23. .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Information)
  24. .WriteTo.File("Logs\\Info\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
  25. .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Warning)
  26. .WriteTo.File("Logs\\Warning\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
  27. .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Error)
  28. .WriteTo.File("Logs\\Error\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
  29. .CreateLogger();
  30. }
  31. }
  32. /// <summary>
  33. /// Serilog日志添加线程ID
  34. /// </summary>
  35. public class SerilogEnricher : ILogEventEnricher
  36. {
  37. private bool useProcessId;
  38. private string PID;
  39. public SerilogEnricher(bool useProcessId = false)
  40. {
  41. this.useProcessId = useProcessId;
  42. if (useProcessId)
  43. {
  44. this.PID = Process.GetCurrentProcess().Id.ToString("D5");
  45. }
  46. }
  47. /// <summary>
  48. /// 在日志中添加线程ID
  49. /// </summary>
  50. /// <param name="logEvent"></param>
  51. /// <param name="propertyFactory"></param>
  52. public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
  53. {
  54. logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(
  55. "ThreadId", Thread.CurrentThread.ManagedThreadId.ToString("D3")));
  56. if (useProcessId)
  57. {
  58. logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("PID", PID));
  59. }
  60. }
  61. }