首页 > 解决方案 > Serilog中不同级别的不同日志文件

问题描述

我正在使用 serilog,我需要将不同的日志级别保存到不同的文件(例如 debug-20200708.log 用于调试级别,info-20200798.log 用于调试级别......)

我使用了下面的代码,但它不能正常工作。

var baseLogger = new Serilog.LoggerConfiguration()
    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Fatal))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Fatal),
            formatter: formatter)

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Error),
            formatter: formatter)

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Warning),
            formatter: formatter)

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Information),
            formatter: formatter)

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Debug),
            formatter: formatter)

    .WriteTo.Logger(l => l
        .Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Verbose))
        .WriteTo.File(
            path: GetLogPath(LogEventLevel.Verbose),
            formatter: formatter)
    .Enrich.FromLogContext();

_logger = baseLogger.CreateLogger();

标签: c#.netloggingserilog

解决方案


我在不同表中插入 SQLServer 时遇到了这个问题。我通过这样做解决了它

Log.Logger = new LoggerConfiguration()
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Error, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
    new SinkOptions { AutoCreateSqlTable = true, TableName = "Error" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Warning, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
   new SinkOptions { AutoCreateSqlTable = true, TableName = "Warning" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Debug, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
    new SinkOptions { AutoCreateSqlTable = true, TableName = "Debug" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Information, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
    new SinkOptions { AutoCreateSqlTable = true, TableName = "Information" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Verbose, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
   new SinkOptions { AutoCreateSqlTable = true, TableName = "Verbose" }))
.CreateLogger();

推荐阅读