【问题标题】:How to use Serilog in .NET Core Console app如何在 .NET Core 控制台应用程序中使用 Serilog
【发布时间】:2020-02-08 20:50:01
【问题描述】:

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

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

  • Serilog
  • 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);
            });
        }

但是,日志记录有效:

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

【问题讨论】:

    标签: c# logging .net-core serilog


    【解决方案1】:

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

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

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

    顺便说一句。值得指出的是Configuration Basics的以下部分

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


    我不确定builder.AddSerilog

    这对我有用。

    using Serilog;
    
    (...)
    
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        (...)
        .CreateLogger();
    
    (...)
    
    return new HostBuilder()
          .ConfigureHostConfiguration(...)
          .ConfigureServices(...)
          .UseSerilog();
    

    【讨论】:

    • 您关于配置的第一点在我的情况下也是有效的。 builder.SetMinimumLevel 设置的优先级高于 Serilog 的设置。因此,我可以在 Serilog 上设置 Verbose 日志记录,在 Microsoft 日志记录上设置实际所需的级别,以获得我需要的内容。我看到您在一些托管应用程序中,例如 ASP.NET。可能您正在使用 Serilog.AspNetCore 包。就我而言,我没有任何主机。
    猜你喜欢
    • 2018-12-09
    • 2019-12-29
    • 2019-05-18
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多