LogFactory.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using Serilog;
  3. using System.IO;
  4. using Serilog.Events;
  5. using Serilog.Enrichers;
  6. using Serilog.Formatting.Compact;
  7. using Microsoft.Extensions.Logging;
  8. using Microsoft.Extensions.Configuration;
  9. namespace SHJX.Service.Common.Logging
  10. {
  11. public static class LogFactory
  12. {
  13. public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
  14. .SetBasePath(Directory.GetCurrentDirectory())//设置基础路径
  15. .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)//添加配置文件
  16. .AddEnvironmentVariables()//添加环境变量
  17. .Build();
  18. /// <summary>
  19. /// 初始化LogFactory的静态成员.
  20. /// </summary>
  21. static LogFactory()
  22. {
  23. //存储日志文件的格式
  24. string SerilogOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} - {ThreadId} - [{Level:u3}] - [{SourceContext}] ----- {Message:lj}{NewLine}{Exception}";
  25. //存储日志文件的路径
  26. static string LogFilePath(string LogEvent) => $@"{AppContext.BaseDirectory}Logs\{LogEvent}\log.log";
  27. Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration)
  28. .MinimumLevel.Debug()
  29. .Enrich.FromLogContext()//使用Serilog.Context.LogContext中的属性丰富日志事件。
  30. .Enrich.With<ThreadIdEnricher>()
  31. .WriteTo.Console(new RenderedCompactJsonFormatter())
  32. .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Debug)).WriteTo.File(LogFilePath("Debug"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate))
  33. .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Information)).WriteTo.File(LogFilePath("Information"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate))
  34. .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Warning)).WriteTo.File(LogFilePath("Warning"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate))
  35. .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Error)).WriteTo.File(LogFilePath("Error"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate))
  36. .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Fatal)).WriteTo.File(LogFilePath("Fatal"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate))
  37. .CreateLogger();
  38. BuildLogger = (type) =>
  39. {
  40. Microsoft.Extensions.Logging.ILogger logger = new LoggerFactory().AddSerilog(Log.Logger).CreateLogger(type.FullName);
  41. return logger;
  42. };
  43. }
  44. /// <summary>
  45. /// <para>获取或设置已配置记录器的日志生成器。</para>
  46. /// <para>应该调用它来返回一个新的日志实例。</para>
  47. /// </summary>
  48. public static Func<Type, Microsoft.Extensions.Logging.ILogger> BuildLogger { get; set; }
  49. }
  50. }