如何在 .NET Core 控制台应用程序中使用 Serilog

Lor*_*eno 21 c# logging serilog .net-core

我希望我的应用程序能够记录到文件,所以我开始寻找比默认的 .NET Core 2.2 日志框架更多的东西。我看到 Serilog 可能会完成这项工作。但是,我找不到任何关于如何使用依赖注入在 .NET Core 控制台应用程序中设置 Serilog 的文档。我看到的只是 ASP.NET 材料,这可能不是我需要的。

我开始自己做。我安装了(Nuget):

  • 串行日志
  • Serilog.Extensions.Logging
  • Serilog.Sinks.File
  • Serilog.Sinks.Console(将 Serilog 用于我的所有日​​志记录)

我创建了一个扩展ServiceCollection

        public static void AddLogging(this IServiceCollection services, Microsoft.Extensions.Logging.LogLevel logLevel)
        {
            var serilogLogger = new LoggerConfiguration()
            .WriteTo.Console()
            .WriteTo.File("log.txt")
            .CreateLogger();

            services.AddLogging(builder =>
            {
                builder.SetMinimumLevel(logLevel);
                builder.AddSerilog(logger: serilogLogger, dispose: true);
            });
        }
Run Code Online (Sandbox Code Playgroud)

但是,日志记录有效:

  • 日志级别不是我设置的。虽然我想要调试,但似乎 serilog 正在使用 INFO 级别。为什么我的设置不被尊重?毕竟我还在使用 NET Core 的日志框架,所以我用它来设置日志级别
  • 我真的正确地进行了这个设置吗?我不确定是否dispose应该true。通常,我希望 NET Core 的依赖注入框架来处理服务的处理。

tym*_*tam 8

我不确定builder.SetMinimumLevel(它不使用 Serilog 枚举)。

我们在创建LoggerConfiguration对象时设置记录器级别。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Debug) // restricted... is Optional
    (...)
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

顺便提一句。值得指出配置基础中的以下部分

Logger 与 sink 最小值- 重要的是要意识到只能为 sinks 提高日志记录级别,而不能降低。因此,如果记录器的 MinimumLevel 设置为 Information,那么将 Debug 作为其指定级别的接收器仍然只能看到信息级别的事件。这是因为记录器级别的配置控制哪些日志语句将导致事件的创建,而接收器级别的配置仅过滤这些。要创建具有更详细级别的单个记录器,请使用单独的 LoggerConfiguration。


我不确定builder.AddSerilog

这对我有用。

using Serilog;

(...)

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    (...)
    .CreateLogger();

(...)

return new HostBuilder()
      .ConfigureHostConfiguration(...)
      .ConfigureServices(...)
      .UseSerilog();
Run Code Online (Sandbox Code Playgroud)