gpt4 book ai didi

c# - 覆盖 MinimumLevel 在 Serilog 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:31 24 4
gpt4 key购买 nike

尝试为 Serilog 2.8.0(在 .NET 4.6.2 中)设置最低日志级别。日志记录工作正常,但覆盖功能不正常。

这是我的Program.cs:

using System;
using LogTest1.Classes;
using Microsoft.Extensions.Configuration;
using Serilog;
using SomeLib;


namespace LogTest
{
internal class Program
{
private static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.Build();

Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();

Log.Verbose("Verbose");
Log.Debug("Debug");
Log.Information("Information");
Log.Warning("Warning");
Log.Error("Error");
Log.Fatal("Fatal");

Console.ReadKey();
}
}
}

appsettings.json 文件:

{
"Serilog": {
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": {
"Default": "Warning",
"Override": {
"LogTest": "Information"
}
},
"WriteTo": [
{ "Name": "Console" }
]
}
}

本应查看所有日志,从信息开始,但只从警告开始。

最佳答案

您正在覆盖 MinimumLevel用于从名为 LogTestSourceContext 发送的日志消息,因为根据您的配置....

"Override": {
"LogTest": "Information"
}

像您所做的那样对 Log.Information("Information") 的简单调用不会设置源上下文,因此覆盖不适用...您必须创建上下文优先。

var contextLog = Log.ForContext("SourceContext", "LogTest");
contextLog.Information("This shows up because of the override!");
contextLog.Information("... And this too!");

Log.Information("This does **not** show, because SourceContext != 'LogTest'");

您可以阅读更多关于 SourceContext 的信息在文档中: https://github.com/serilog/serilog/wiki/Writing-Log-Events#source-contexts

关于c# - 覆盖 MinimumLevel 在 Serilog 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414016/

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