Files
XplorePlane/XP.Common/Logging/SerilogInitializer.cs
T

57 lines
2.4 KiB
C#

using System;
using Serilog;
using Serilog.Events;
using XP.Common.Configs;
using XP.Common.Logging.ViewModels;
namespace XP.Common.Logging
{
/// <summary>
/// Serilog全局初始化工具(应用启动时调用一次)
/// </summary>
public static class SerilogInitializer
{
/// <summary>
/// 初始化Serilog日志
/// </summary>
public static void Initialize(SerilogConfig config)
{
if (config == null) throw new ArgumentNullException(nameof(config));
// 确保日志目录存在
if (!System.IO.Directory.Exists(config.LogPath))
System.IO.Directory.CreateDirectory(config.LogPath);
// 解析日志级别
if (!Enum.TryParse<LogEventLevel>(config.MinimumLevel, true, out var minLevel))
minLevel = LogEventLevel.Information;
// 解析文件分割规则
if (!Enum.TryParse<RollingInterval>(config.RollingInterval, true, out var rollingInterval))
rollingInterval = RollingInterval.Day;
// 构建Serilog配置
var loggerConfig = new LoggerConfiguration()
.MinimumLevel.Is(minLevel)
.Enrich.FromLogContext() // 启用上下文(模块标记)
.WriteTo.File(
path: System.IO.Path.Combine(config.LogPath, "app_.log"), // 最终文件名:app_20260307.log
rollingInterval: rollingInterval,
fileSizeLimitBytes: config.FileSizeLimitMB * 1024 * 1024,
retainedFileCountLimit: config.RetainedFileCountLimit,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
);
// 调试环境输出到控制台
if (config.EnableConsole)
loggerConfig.WriteTo.Console(
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}");
// 注册实时日志查看器 Sink(接收所有级别日志)| Register real-time log viewer sink (receive all levels)
loggerConfig.WriteTo.Sink(RealTimeLogSink.Instance, Serilog.Events.LogEventLevel.Verbose);
// 全局初始化
Log.Logger = loggerConfig.CreateLogger();
}
}
}