// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。 // // 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。 // // ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ namespace Admin.NET.Core; public static class LoggingSetup { /// <summary> /// 日志注册 /// </summary> /// <param name="services"></param> public static void AddLoggingSetup(this IServiceCollection services) { // æ—¥å¿—ç›‘å¬ services.AddMonitorLogging(options => { options.IgnorePropertyNames = new[] { "Byte" }; options.IgnorePropertyTypes = new[] { typeof(byte[]) }; }); // æŽ§åˆ¶å°æ—¥å¿— var consoleLog = App.GetConfig<bool>("Logging:Monitor:ConsoleLog", true); services.AddConsoleFormatter(options => { options.DateFormat = "yyyy-MM-dd HH:mm:ss(zzz) dddd"; //options.WithTraceId = true; // 显示线程Id //options.WithStackFrame = true; // 显示程åºé›† options.WriteFilter = (logMsg) => { return consoleLog; }; }); // 日志写入文件 if (App.GetConfig<bool>("Logging:File:Enabled", true)) { var loggingMonitorSettings = App.GetConfig<LoggingMonitorSettings>("Logging:Monitor", true); Array.ForEach(new[] { LogLevel.Information, LogLevel.Warning, LogLevel.Error }, logLevel => { services.AddFileLogging(options => { options.WithTraceId = true; // 显示线程Id options.WithStackFrame = true; // 显示程åºé›† options.FileNameRule = fileName => string.Format(fileName, DateTime.Now, logLevel.ToString()); // æ¯å¤©åˆ›å»ºä¸€ä¸ªæ–‡ä»¶ options.WriteFilter = (logMsg) => { return logMsg.LogLevel >= logLevel && logMsg.LogName != CommonConst.SysLogCategoryName; // åªå†™LoggingMonitor日志 }; // 日志级别 options.HandleWriteError = (writeError) => // 写入失败时å¯ç”¨å¤‡ç”¨æ–‡ä»¶ { writeError.UseRollbackFileName(Path.GetFileNameWithoutExtension(writeError.CurrentFileName) + "-oops" + Path.GetExtension(writeError.CurrentFileName)); }; if (loggingMonitorSettings.JsonBehavior == JsonBehavior.OnlyJson) { options.MessageFormat = LoggerFormatter.Json; // options.MessageFormat = LoggerFormatter.JsonIndented; options.MessageFormat = (logMsg) => { var jsonString = logMsg.Context.Get("loggingMonitor"); return jsonString?.ToString(); }; } }); }); } // 日志写入ElasticSearch if (App.GetConfig<bool>("Logging:ElasticSearch:Enabled", true)) { services.AddDatabaseLogging<ElasticSearchLoggingWriter>(options => { options.WithTraceId = true; // 显示线程Id options.WithStackFrame = true; // 显示程åºé›† options.IgnoreReferenceLoop = false; // 忽略循环检测 options.MessageFormat = LoggerFormatter.Json; options.WriteFilter = (logMsg) => { return logMsg.LogName == CommonConst.SysLogCategoryName; // åªå†™LoggingMonitor日志 }; }); } // 日志写入数æ®åº“ if (App.GetConfig<bool>("Logging:Database:Enabled", true)) { services.AddDatabaseLogging<DatabaseLoggingWriter>(options => { options.WithTraceId = true; // 显示线程Id options.WithStackFrame = true; // 显示程åºé›† options.IgnoreReferenceLoop = false; // 忽略循环检测 options.WriteFilter = (logMsg) => { return logMsg.LogName == CommonConst.SysLogCategoryName; // åªå†™LoggingMonitor日志 }; }); } } }