第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

動態(tài)設(shè)置每個(gè) Logger 實(shí)例的 Nlog 日志級別 ASP.Net Core 2.x

動態(tài)設(shè)置每個(gè) Logger 實(shí)例的 Nlog 日志級別 ASP.Net Core 2.x

C#
拉丁的傳說 2021-11-21 10:47:40
目標(biāo):動態(tài)選擇我想要詳細(xì)記錄的 HTTP 請求(不同的日志級別)。概述:我有一個(gè) ASP.Net core 2.1 Web 服務(wù)器正在運(yùn)行,并且一旦投入生產(chǎn),如果我需要調(diào)試問題,我希望能夠更改日志級別。我找到了如何全局更改日志級別;但是,更改日志級別是持久的......也就是每次調(diào)用我的控制器后都不會重置。    [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 請求(標(biāo)頭或 cookie)中設(shè)置一個(gè)標(biāo)志,以便為每個(gè)請求啟用更詳細(xì)的日志記錄級別。這樣我就不會用來自請求者的詳細(xì)日志淹沒我的日志。問題:如何動態(tài)設(shè)置每個(gè)記錄器實(shí)例的日志級別?(我相信這是正確的措辭)我目前正在使用 NLog 包 4.5。
查看完整描述

3 回答

?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

NLog 4.6.7 允許您在日志記錄規(guī)則過濾器中使用布局minLevel/maxLevel

您可以使用默認(rèn)日志級別的 NLog-Config-Variable,然后在您的 Web 應(yīng)用程序上創(chuàng)建一個(gè)隱藏方法來修改 NLog-Config-Variable 并調(diào)用ReconfigExistingLoggers().

然后設(shè)置一個(gè)計(jì)時(shí)器,在 30 秒后將該 NLog-Config-Variable 恢復(fù)為其原始值。并且還調(diào)用了ReconfigExistingLoggers()

另見:https : //github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules


查看完整回答
反對 回復(fù) 2021-11-21
?
30秒到達(dá)戰(zhàn)場

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

與其嘗試自定義 NLog 日志記錄級別(這會影響整個(gè)過程),我認(rèn)為您應(yīng)該尋求一種解決方案來修改日志語句本身的日志級別。


要完成這項(xiàng)工作,您需要具備以下條件:


一種機(jī)制,用于識別您想要調(diào)試日志記錄的請求

記錄器的包裝器,以便您可以動態(tài)覆蓋日志級別

第一個(gè)要求很簡單 - 設(shè)置 cookie 或自定義 HTTP 標(biāo)頭,并檢查兩者是否存在。您需要將此檢查的結(jié)果提供給您的 LogWrapper 實(shí)例,以便它知道什么時(shí)候應(yīng)該做一些特殊的事情。


LogWrapper 必須針對每個(gè)請求進(jìn)行實(shí)例化,以便實(shí)例不會跨請求共享。最簡單的方法是在控制器的構(gòu)造函數(shù)中按需創(chuàng)建它(但你也可以將它連接到 DI 容器以進(jìn)行自動注入)。


這看起來像這樣:


public class HomeController : Controller

{

    private readonly LogWrapper _logger;


    public HomeController(ILogger<HomeController> logger)

    {

        var isDebugRequest = ...;

        _logger = new LogWrapper<HomeController>(logger, isDebugRequest);

    }    


    ...

}

此處解釋了為 NLog 創(chuàng)建日志包裝器的基礎(chǔ)知識,但您似乎已經(jīng)在使用為 Microsoft.Extensions.Logging 創(chuàng)建的包裝器,因此您需要改為包裝該接口:


public class LogWrapper<T> : Microsoft.Extensions.Logging.ILogger

{

    private readonly ILogger<T> _logger;

    private readonly bool _debug;


    public LogWrapper(ILogger<T> logger, bool isDebug)

    {

        _logger = logger;

        _debug = isDebug;

    }    


    public void Log<TState>(LogLevel logLevel,

                            EventId eventId,

                            TState state,

                            Exception exception,

                            Func<TState, Exception, string> formatter)

    {

        if (_debug) 

        {

            // override log level here

            _logger.Log(LogLevel.Warning, eventId, state, exception, formatter); 

        }

        else 

        {

            _logger.Log(logLevel, eventId, state, exception, formatter);

        }

    }


    // ILogger has two other methods you'll need to implement

}    

這種方法的缺點(diǎn)是日志語句沒有其原始日志級別,這對您的用例可能重要也可能不重要。


查看完整回答
反對 回復(fù) 2021-11-21
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

也許您可以使用 session-cookie 來控制是否啟用調(diào)試模式:


<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>

然后像這樣激活會話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

}

如果${aspnet-session}不需要session-cookies ,那么 NLog.Web.AspNetCore 有其他選項(xiàng)來提取 HttpContext-details。另見:https : //nlog-project.org/config/?tab=layout-renderers&search=package : nlog.web.aspnetcore


查看完整回答
反對 回復(fù) 2021-11-21
  • 3 回答
  • 0 關(guān)注
  • 667 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號