using System; using Serilog; using System.IO; using Serilog.Events; using Serilog.Enrichers; using Serilog.Formatting.Compact; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration; namespace SHJX.Service.Common.Logging { public static class LogFactory { public static IConfiguration Configuration { get; } = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory())//设置基础路径 .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)//添加配置文件 .AddEnvironmentVariables()//添加环境变量 .Build(); /// /// 初始化LogFactory的静态成员. /// static LogFactory() { //存储日志文件的格式 string SerilogOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} - {ThreadId} - [{Level:u3}] - [{SourceContext}] ----- {Message:lj}{NewLine}{Exception}"; //存储日志文件的路径 static string LogFilePath(string LogEvent) => $@"{AppContext.BaseDirectory}Logs\{LogEvent}\log.log"; Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration) .MinimumLevel.Debug() .Enrich.FromLogContext()//使用Serilog.Context.LogContext中的属性丰富日志事件。 .Enrich.With() .WriteTo.Console(new RenderedCompactJsonFormatter()) .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Debug)).WriteTo.File(LogFilePath("Debug"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)) .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Information)).WriteTo.File(LogFilePath("Information"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)) .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Warning)).WriteTo.File(LogFilePath("Warning"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)) .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Error)).WriteTo.File(LogFilePath("Error"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)) .WriteTo.Logger(lg => lg.Filter.ByIncludingOnly(p => p.Level.Equals(LogEventLevel.Fatal)).WriteTo.File(LogFilePath("Fatal"), rollingInterval: RollingInterval.Day, outputTemplate: SerilogOutputTemplate)) .CreateLogger(); BuildLogger = (type) => { Microsoft.Extensions.Logging.ILogger logger = new LoggerFactory().AddSerilog(Log.Logger).CreateLogger(type.FullName); return logger; }; } /// /// 获取或设置已配置记录器的日志生成器。 /// 应该调用它来返回一个新的日志实例。 /// public static Func BuildLogger { get; set; } } }