gpt4 book ai didi

c# - 动态设置每个 Logger 实例的 Nlog 日志级别 ASP.Net Core 2.x

转载 作者:行者123 更新时间:2023-12-04 11:46:29 27 4
gpt4 key购买 nike

目标 :动态选择我想要详细日志记录的 HTTP 请求(不同的日志级别)。

概览 :我有一个 ASP.Net 核心 2.1 Web 服务器正在运行并且一旦投入生产,如果我需要调试问题,我希望能够更改日志级别。我已经找到了如何 globally change the log level ;但是,更改日志级别是持久的......也就是每次调用我的 Controller 后都不会重置。

    [HttpGet]
public async Task<IEnumerable<string>> Get()
{
this.Logger.LogTrace("This should NOT get logged");
SetMinLogLevel(LogLevel.Trace);
this.Logger.LogTrace("This should be logged");

return new string[] { "value1", "value2" };
}

public static void SetMinLogLevel(LogLevel NewLogLevel)
{
foreach (var rule in LogManager.Configuration.LoggingRules)
{
rule.EnableLoggingForLevel(NewLogLevel);
}

//Call to update existing Loggers created with GetLogger() or
//GetCurrentClassLogger()
LogManager.ReconfigExistingLoggers();
}

我希望请求者能够在他们的 HTTP 请求( header 或 cookie)中设置一个标志,以便为每个请求启用更详细的日志记录级别。这样我就不会用来自请求者的详细日志淹没我的日志。

问题 :如何动态设置每个记录器实例的日志级别? (我相信这是正确的措辞)

我目前正在使用 NLog 包 4.5。

最佳答案

也许您可以使用 session-cookie 来控制是否启用 Debug模式:

<targets>
<target type="file" name="logfile" filename="applog.txt" />
</targets>
<rules>
<logger name="*" minlevel="Off" writeTo="logfile" ruleName="debugCookieRule">
<filters defaultAction="Log">
<when condition="'${aspnet-session:EnableDebugMode}' == ''" action="Ignore" />
</filters>
</logger>
</rules>
然后像这样激活 session cookie:
public void SetMinLogLevel(LogLevel NewLogLevel)
{
var cookieRule = LogManager.Configuration.FindRuleByName("debugCookieRule");
if (cookieRule != null)
{
cookieRule.MinLevel = NewLogLevel;

// Schedule disabling of logging-rule again in 60 secs.
Task.Run(async () => { await Task.Delay(60000).ConfigureAwait(false); cookieRule.MinLevel = LogLevel.Off; LogManager.ReconfigExistingLoggers(); });

// Activate EnableDebugMode for this session
HttpContext.Session.SetString("EnableDebugMode", "Doctor has arrived");
}

LogManager.ReconfigExistingLoggers(); // Refresh loggers
}
如果 session cookie 和 ${aspnet-session}不需要,然后 NLog.Web.AspNetCore 有其他选项来提取 HttpContext-details。另见: https://nlog-project.org/config/?tab=layout-renderers&search=package:nlog.web.aspnetcore

关于c# - 动态设置每个 Logger 实例的 Nlog 日志级别 ASP.Net Core 2.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51754425/

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