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

时间:2019-10-11 10:29:22

标签: c# logging .net-core serilog

我希望我的应用程序具有记录到文件的功能,因此我开始寻找比默认的.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级别,尽管我想使用DEBUG。为什么不尊重我的设置?毕竟,我仍在使用NET Core的日志记录框架,因此我正在使用它来设置日志级别
  • 我实际上可以正确执行此设置吗?我不确定dispose是否应为true。通常,我希望NET Core的依赖注入框架可以处理服务。

2 个答案:

答案 0 :(得分:1)

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

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

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

顺便说一句。值得指出Configuration Basics

中的以下部分
  

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


我不确定builder.AddSerilog

这是对我有用的东西。

using Serilog;

(...)

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

(...)

return new HostBuilder()
      .ConfigureHostConfiguration(...)
      .ConfigureServices(...)
      .UseSerilog();

答案 1 :(得分:-2)

我必须推荐以下教程: https://www.youtube.com/watch?v=GAOCe-2nXqc ASP.Net Core 控制台应用程序,包括依赖注入。我想它会回答你所有的问题。