【问题标题】:Does Serilog captures log automatically when configured with Log LevelSerilog 是否在配置日志级别时自动捕获日志
【发布时间】:2019-03-28 03:25:18
【问题描述】:

我是第一次使用 Serilog,并试图弄清楚它是如何工作的。我正在查看配置了 Serilog 的示例 ASP.Net Core 应用程序。正在从 Appsettings.json 读取 serilog 配置:

"Serilog": {
    "ApplicationName": "app-name",
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Verbose",
    "WriteTo": [
        {
            "Name": "RollingFile",
            "Args": { "pathFormat": "log-{Date}.log" }
        }
    ]
}

Log 对象在 Startup 中定义,“AddSerilog”在“ConfigureServices”方法中定义。但除此之外,不存在其他日志信息。但是,当我运行应用程序时,会在解决方案目录中生成自动日志文件。

问题是 Serilog 会自动创建这些日志文件吗?

【问题讨论】:

  • Serilog 将创建这些日志文件,如果您想将日志写入这些文件,您需要调用Log.Logger.Information("This is Info");

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


【解决方案1】:

ConfigureServices 中对AddSerilog 的调用向Microsoft 的ILoggingBuilder 注册了一个日志记录提供程序。此提供程序 (SerilogLoggerProvider) 实现了 ILoggerProvider 及其 CreateLogger 方法,如下所示:

public ILogger CreateLogger(string name)
{
    return new SerilogLogger(this, _logger, name);
}

从这段代码可以清楚地看出,Serilog 的SerilogLogger 实现了微软的ILogger 接口。

当 ASP.NET Core 框架需要创建记录器对象时,它使用ILoggerProvider 的实现通过调用CreateLogger 来创建ILogger 的实例。使用已注册的 Serilog 提供程序,最终 ASP.NET Core 请求 ILogger 的实例并接收 SerilogLogger 的实例,这提供了 ASP.NET Core 和 Serilog 之间的桥梁。

RollingFile 接收器本身会在发出日志事件时自动创建配置的日志文件,并具有相应的创建时间戳文件等的逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多