gpt4 book ai didi

c# - dotnetcore 控制台上的 Microsoft.Extensions.Logging 和 Serilog。在 RollingFile 接收器中包含范围信息

转载 作者:太空狗 更新时间:2023-10-29 21:43:13 24 4
gpt4 key购买 nike

我正在使用 Microsoft.Extensions.Logging.ILogger 抽象,它提供了 BeginScope 函数,它在范围的创建和处理之间将层次结构信息添加到任何日志中。

ms 的默认控制台提供程序运行良好,范围也很有用。我希望我的 Serilog RollingFile 接收器也包含此信息。

配置代码:

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Is(LogEventLevel.Debug)
.Enrich.WithThreadId()
.Enrich.WithProcessId()
.Enrich.WithProcessName()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.RollingFile(pathFormat: "/opt/iqdata/logs/log-{Date}.txt", restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, retainedFileCountLimit:30, flushToDiskInterval:TimeSpan.FromSeconds(15), shared:true)
.Enrich.WithProperty("process", "Worker")
.CreateLogger();
var loggerFactory = new LoggerFactory().AddSerilog(Log.Logger).AddConsole(includeScopes: true, minLevel: LogLevel.Debug);

IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(path: "AppSettings.json", optional: false, reloadOnChange: true).Build();

provider = new ServiceCollection()
.AddOptions()
.AddSingleton(loggerFactory)
.BuildServiceProvider();

logger = provider.GetService<ILoggerFactory>().CreateLogger("Worker.Program");
logger.LogDebug("Current directory:{CurrentDirectory}", Directory.GetCurrentDirectory());

那么我需要做什么才能将范围信息写入文件?另外作为奖励,我该怎么做才能在 RollingFile 接收器中包含像 ProcessName 这样的丰富值?

最佳答案

您可以通过设置滚动文件接收器的 outputTemplate 参数来包含范围。范围属性称为 {Scope}

但是,使用 Serilog 2.5,您可以在输出模板中使用 {Properties} 包括范围和任何其他丰富的属性,如下所示。

.WriteTo.RollingFile("log-{Date}.txt",
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message} {Properties}{NewLine}{Exception}")

关于c# - dotnetcore 控制台上的 Microsoft.Extensions.Logging 和 Serilog。在 RollingFile 接收器中包含范围信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44804573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com