Serilog接收ASPNET核心记录

时间:2017-11-02 08:36:13

标签: logging asp.net-core .net-core serilog

我想要的是能够使用Serilog和Microsoft.Extensions.Logging(ILogger)来检测我的代码。并让它们都配置相同,以便它们写入相同的“接收器”。我有一个ASPNET核心应用程序,使用日志工作和一些依赖库,使用Serilog,我想捕获日志输出(与ASPNET核心应用程序相同的地方)。

我知道有一个nuget包可以在ASPNET Core应用程序中使用Serilog日志记录。但是,这个特殊的扩展

(WebAppBuilder).UseSerilog()

似乎用serilog版本完全替换现有的ILoggerFactory,这会阻止我的ASPNET日志记录工作。如果我可以简单地插入serilog配置,使其像原始ASPNET核心机制一样工作,那就没问题。但是,Serilog.Settings.Configuration似乎没有忠实地将配置复制到Serilog。

让我感到困扰的是,他们不能共享共享配置,如果我使用其他使用NLog的库,如何将其集成到同一个日志记录基础架构中呢?

Serilog的配置是否与Microsoft.Extensions.Logging相同?如果是这样,这是如何实现的?

1 个答案:

答案 0 :(得分:3)

在您的Program.cs中,您将拥有此信息(在您加载IConfigurationRoot之后):

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .WriteTo.Console()
    .CreateLogger();

设置默认"控制台"与您在appsettings.json配置文件中设置的任何其他内容一起下载。

在您的appsettings.json中,您可以拥有此功能,例如:

{
    "Serilog": {
        "MinimumLevel": {
            "Default": "Information",
            "Override": {
                "Microsoft": "Warning",
                "System": "Error"
            }
        },
        "WriteTo": [{
            "Name": "Seq",
            "Args": {
                "serverUrl": "http://localhost:5341"
            }
        }],
        "Enrich": ["FromLogContext"],
        "Properties": {
            "Application": "MyApplication"
        }
    }
}

现在您可以写入静态Serilog.Log

Log.Information("JSON example {@Json}", json);

或注入Microsoft.Extensions.Logging.ILogger

logger.LogInformation("JSON example {@Json}", json);

并且两者都将写入已配置的接收器。