// 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日志
};
});
}
}
}