| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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();
- /// <summary>
- /// 初始化LogFactory的静态成员.
- /// </summary>
- 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<ThreadIdEnricher>()
- .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;
- };
- }
- /// <summary>
- /// <para>获取或设置已配置记录器的日志生成器。</para>
- /// <para>应该调用它来返回一个新的日志实例。</para>
- /// </summary>
- public static Func<Type, Microsoft.Extensions.Logging.ILogger> BuildLogger { get; set; }
- }
- }
|