我希望我的应用程序能够记录到文件,因此我开始寻找默认的 .NET Core 2.2 日志框架之外的其他东西。我发现 Serilog 可以完成这项工作。但是,我找不到任何有关如何使用依赖注入在 .NET Core 控制台应用程序中设置 Serilog 的文档。我看到的都是 ASP.NET 资料,这可能不是我需要的。
我开始自己做。我安装了(Nuget):
我创建了一个扩展
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);
});
}
但是,日志记录有效:
dispose
是否应该是true
。一般来说,我希望 NET Core 的依赖注入框架来处理服务的处置。我不确定
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();
如果您不想使用 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();