168 lines
6.9 KiB
C#
168 lines
6.9 KiB
C#
using Serilog;
|
|
using Serilog.Events;
|
|
|
|
namespace FileShare_Common.Infrastructure
|
|
{
|
|
/// <summary>
|
|
/// Serilog 日志配置 —— 可在 FileShare-API 和 FileShare-PC 中共享。
|
|
/// </summary>
|
|
public static class LoggingConfiguration
|
|
{
|
|
/// <summary>
|
|
/// 默认日志目录
|
|
/// </summary>
|
|
private static readonly string DefaultLogDir = Path.Combine(AppContext.BaseDirectory, "logs");
|
|
|
|
/// <summary>
|
|
/// 创建控制台日志记录器(开发环境)。
|
|
/// </summary>
|
|
public static ILogger CreateConsoleLogger(
|
|
LogEventLevel minimumLevel = LogEventLevel.Debug)
|
|
{
|
|
return new LoggerConfiguration()
|
|
.MinimumLevel.Is(minimumLevel)
|
|
.Enrich.FromLogContext()
|
|
.WriteTo.Console(
|
|
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
|
|
.CreateLogger();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建控制台 + 文件日志记录器。
|
|
/// </summary>
|
|
/// <param name="minimumLevel">最低日志级别</param>
|
|
/// <param name="logDir">日志目录,默认 ./logs</param>
|
|
/// <param name="retainedDays">保留天数</param>
|
|
public static ILogger CreateDefaultLogger(
|
|
LogEventLevel minimumLevel = LogEventLevel.Information,
|
|
string? logDir = null,
|
|
int retainedDays = 30)
|
|
{
|
|
logDir ??= DefaultLogDir;
|
|
|
|
return new LoggerConfiguration()
|
|
.MinimumLevel.Is(minimumLevel)
|
|
//.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
|
|
//.MinimumLevel.Override("System", LogEventLevel.Warning)
|
|
.Enrich.FromLogContext()
|
|
.Enrich.WithMachineName()
|
|
.Enrich.WithThreadId()
|
|
.WriteTo.Console(
|
|
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
|
|
.WriteTo.File(
|
|
path: Path.Combine(logDir, "log-.txt"),
|
|
rollingInterval: RollingInterval.Day,
|
|
retainedFileCountLimit: retainedDays,
|
|
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
|
|
encoding: System.Text.Encoding.UTF8)
|
|
.CreateLogger();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 创建只写文件的日志记录器(桌面应用静默模式)。
|
|
/// </summary>
|
|
public static ILogger CreateFileOnlyLogger(
|
|
LogEventLevel minimumLevel = LogEventLevel.Information,
|
|
string? logDir = null,
|
|
int retainedDays = 30)
|
|
{
|
|
logDir ??= DefaultLogDir;
|
|
|
|
return new LoggerConfiguration()
|
|
.MinimumLevel.Is(minimumLevel)
|
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
|
|
.Enrich.FromLogContext()
|
|
.WriteTo.File(
|
|
path: Path.Combine(logDir, "app-.txt"),
|
|
rollingInterval: RollingInterval.Day,
|
|
retainedFileCountLimit: retainedDays,
|
|
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
|
|
encoding: System.Text.Encoding.UTF8)
|
|
.CreateLogger();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 静态日志访问器 —— 全局静态入口,方便在没有 DI 的场景下使用。
|
|
/// </summary>
|
|
public static class AppLog
|
|
{
|
|
/// <summary>
|
|
/// 保存全局日志记录器实例。
|
|
/// </summary>
|
|
private static ILogger? _logger;
|
|
|
|
/// <summary>
|
|
/// 初始化全局日志记录器。
|
|
/// </summary>
|
|
public static void Initialize(ILogger logger)
|
|
{
|
|
_logger = logger;
|
|
Log.Logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取全局日志记录器。若未初始化则回退到 Serilog.Log.Logger。
|
|
/// </summary>
|
|
public static ILogger Logger => _logger ?? Log.Logger;
|
|
|
|
/// <summary>
|
|
/// 写入 Debug 级别日志。
|
|
/// </summary>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Debug(string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Debug(messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Information 级别日志。
|
|
/// </summary>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Information(string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Information(messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Warning 级别日志。
|
|
/// </summary>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Warning(string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Warning(messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Error 级别日志。
|
|
/// </summary>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Error(string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Error(messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Error 级别日志,并附带异常信息。
|
|
/// </summary>
|
|
/// <param name="exception">异常对象。</param>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Error(Exception exception, string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Error(exception, messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Fatal 级别日志。
|
|
/// </summary>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Fatal(string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Fatal(messageTemplate, propertyValues);
|
|
|
|
/// <summary>
|
|
/// 写入 Fatal 级别日志,并附带异常信息。
|
|
/// </summary>
|
|
/// <param name="exception">异常对象。</param>
|
|
/// <param name="messageTemplate">消息模板。</param>
|
|
/// <param name="propertyValues">属性值。</param>
|
|
public static void Fatal(Exception exception, string messageTemplate, params object?[] propertyValues)
|
|
=> Logger.Fatal(exception, messageTemplate, propertyValues);
|
|
}
|
|
}
|