using Microsoft.AspNetCore.Builder; using Serilog; using Serilog.Events; using SlnMesnac.Config; using System; using System.IO; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2024 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:LAPTOP-E0N2L34V * 命名空间:SlnMesnac.Serilog * 唯一标识:496f8d2b-70e3-4a05-ae18-a9b0fcd06b82 * * 创建者:WenJY * 电子邮箱:wenjy@mesnac.com * 创建时间:2024-03-27 21:58:35 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> namespace SlnMesnac.Serilog { /// /// Serilog /// public static class SerilogExtensions { // 定义自定义日志级别 public static readonly LogEventLevel AgvLevel = (LogEventLevel)35; //public static IApplicationBuilder UseSerilogExtensions(this IApplicationBuilder app) //{ // // 获取当前程序所在的目录 // string currentDirectory = Directory.GetCurrentDirectory(); // Log.Logger = new LoggerConfiguration() // .MinimumLevel.Verbose() // 确保能捕获所有级别日志 // .Enrich.With(new CustomLogLevelAbbreviationEnricher()) // 添加自定义日志级别缩写增强器 // .WriteTo.Console( // outputTemplate: "{Timestamp:MM-dd HH:mm:ss} [{LevelAbbreviation}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}", // restrictedToMinimumLevel: LogEventLevel.Error // ) // // retainedFileCountLimit: 3, // 保留最近3天日志 // .WriteTo.File(path: GetDynamicLogPath("Info"), retainedFileCountLimit: 3, restrictedToMinimumLevel: LogEventLevel.Information, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}") // .WriteTo.File(path: GetDynamicLogPath("Error"), retainedFileCountLimit: 3, restrictedToMinimumLevel: LogEventLevel.Error, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}") // .WriteTo.File(path: GetDynamicLogPath("Agv"), retainedFileCountLimit: 3, restrictedToMinimumLevel: AgvLevel, rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}") // 新增 Agv 日志文件 // .CreateLogger(); // // 启用 Serilog 中间件 // app.UseSerilogRequestLogging(); // return app; //} public static IApplicationBuilder UseSerilogExtensions(this IApplicationBuilder app) { // 获取当前程序所在的目录 string currentDirectory = Directory.GetCurrentDirectory(); var logPath = Path.Combine(currentDirectory, "Logs"); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() // 确保能捕获所有级别日志 .Enrich.With(new CustomLogLevelAbbreviationEnricher()) // 添加自定义日志级别缩写增强器 .WriteTo.Console( outputTemplate: "{Timestamp:MM-dd HH:mm:ss} [{LevelAbbreviation}] [{ClassName}] [{LineNumber}] {Message:lj}{NewLine}{Exception}", restrictedToMinimumLevel: LogEventLevel.Error ) // retainedFileCountLimit: 3, // 保留最近3天日志 .WriteTo.Logger(lc => lc .Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Info")) .WriteTo.File(Path.Combine($"{logPath}/Info/", "Info.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3)) .WriteTo.Logger(lc => lc .Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Plc")) .WriteTo.File(Path.Combine($"{logPath}/Plc/", "Plc.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3)) .WriteTo.Logger(lc => lc .Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Agv")) .WriteTo.File(Path.Combine($"{logPath}/Agv/", "Agv.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3)) .WriteTo.Logger(lc => lc .Filter.ByIncludingOnly(logEvent => logEvent.Properties.ContainsKey("Module") && logEvent.Properties["Module"].ToString().Contains("Error")) .WriteTo.File(Path.Combine($"{logPath}/Error/", "Error.log"), rollingInterval: RollingInterval.Day, retainedFileCountLimit: 3)) .CreateLogger(); // 启用 Serilog 中间件 app.UseSerilogRequestLogging(); return app; } // 新的动态路径生成方法 private static string GetDynamicLogPath(string logType) { return Path.Combine( Directory.GetCurrentDirectory(), "Logs", $"{DateTime.UtcNow:yyyy-MM-dd}", $"{logType}-.log" ); } } }