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

问题描述 投票:0回答:2

我希望我的应用程序能够记录到文件,因此我开始寻找默认的 .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);
            });
        }

但是,日志记录有效:

  • 日志级别不是我设置的。看来serilog正在使用INFO级别,尽管我想要DEBUG。为什么我的设置不被尊重?毕竟我还在使用 NET Core 的日志框架,所以我用它来设置日志级别
  • 我的设置真的正确吗?我不太确定
    dispose
    是否应该是
    true
    。一般来说,我希望 NET Core 的依赖注入框架来处理服务的处置。
c# logging .net-core serilog
2个回答
13
投票

我不确定

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

我们在创建

LoggerConfiguration
对象时设置记录器级别。

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

顺便说一句。值得指出配置基础知识

中的以下部分

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


我不确定

builder.AddSerilog

这对我有用。

using Serilog;

(...)

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

(...)

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

0
投票

如果您不想使用 HostBuilder 而是使用 serviceCollection 来注入 serilog 皮肤,您还可以使用该库:Serilog.Extensions.Logging 并这样做:

using Serilog;
using Microsoft.Extensions.Logging;
...
Log.Logger = new LoggerConfiguration()
  .WriteTo.Console()
  .CreateLogger();
IServiceCollection services = new ServiceCollection();
services.AddLogging(builder =>
{
  builder.SetMinimumLevel(LogLevel.Debug);
  builder.AddSerilog(Log.Logger, true);
});
serviceProvider = services.BuildServiceProvider();
© www.soinside.com 2019 - 2024. All rights reserved.