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

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

如何使用 appsettings.json 覆蓋 serilog 設(shè)置

如何使用 appsettings.json 覆蓋 serilog 設(shè)置

C#
www說(shuō) 2022-12-24 10:12:57
我有一個(gè)擴(kuò)展方法來(lái)配置我的記錄器: public static class Extensions {     public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>         webHostBuilder.UseSerilog((context, loggerConfiguration) =>         {             var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");             if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))             {                 level = LogEventLevel.Information;             }             loggerConfiguration.Enrich                 .FromLogContext()                 .MinimumLevel.Is(level);             loggerConfiguration                 .ReadFrom.Configuration(context.Configuration)                 .WriteTo.Console(                     theme: AnsiConsoleTheme.Code,                     outputTemplate: "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");         }); }我添加了這一行.ReadFrom.Configuration(context.Configuration)并期望來(lái)自 appsettings.json 的所有設(shè)置都將覆蓋當(dāng)前配置。我的意思是,如果我在 appsettings.json 中指定其他 outputTemplate,那么它將覆蓋現(xiàn)有的。    "Serilog": {        "WriteTo": [            {                "Name": "Console",                "Args": {                    "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"                }            }        ]    }但它不起作用。現(xiàn)在日志消息是重復(fù)的,一個(gè)是代碼格式的,另一個(gè)是配置格式的。如何在運(yùn)行時(shí)覆蓋 appsettings.json 中的一些設(shè)置?[03:59:09 INF] 事件處理器服務(wù)正在啟動(dòng)。[19-04-19 00:59:09 INF] 事件處理器服務(wù)正在啟動(dòng)。我有在服務(wù)中使用的擴(kuò)展方法,但有時(shí)我需要覆蓋 appsettings.json(或環(huán)境變量)中的某些設(shè)置,我該怎么做?因?yàn)楫?dāng)前的解決方案不起作用并添加了第二個(gè)記錄器
查看完整描述

1 回答

?
慕尼黑5688855

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

您基本上必須檢查配置是否已經(jīng)指定了控制臺(tái)記錄器。存儲(chǔ)接收器的字段是私有的。所以你必須使用類(lèi)似的東西來(lái)對(duì)配置做出反應(yīng)。當(dāng)您想要覆蓋記錄器上的某些屬性時(shí),您還需要使用反射來(lái)訪(fǎng)問(wèn)這些字段。下面的代碼適用于我的簡(jiǎn)單測(cè)試應(yīng)用程序。


    public static class Extensions

    {

        public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>

            webHostBuilder.UseSerilog((context, loggerConfiguration) =>

            {

                var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");

                if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))

                {

                    level = LogEventLevel.Information;

                }


                loggerConfiguration.Enrich

                    .FromLogContext()

                    .MinimumLevel.Is(level);


                loggerConfiguration

                    .ReadFrom.Configuration(context.Configuration);


                // Get the field that holds the sinks.

                var sinks = loggerConfiguration.GetType()

                    .GetField("_logEventSinks", BindingFlags.Instance | BindingFlags.NonPublic)

                    .GetValue(loggerConfiguration) as List<ILogEventSink>;


                // Get the sink type for reusage.

                var sinkType = typeof(AnsiConsoleTheme).Assembly.GetType("Serilog.Sinks.SystemConsole.ConsoleSink");


                // Find the first sink of the right type.

                var sink = sinks?.FirstOrDefault(s => sinkType == s.GetType());


                // Check if a sink was found.

                if (sink == null)

                {

                    // No sink found add a new one.

                    loggerConfiguration

                        .WriteTo.Console(

                            theme: AnsiConsoleTheme.Code,

                            outputTemplate:

                            "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");

                }

                else

                {

                    // Otherwise change the theme.

                    sinkType.GetField("_theme", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(sink, AnsiConsoleTheme.Code);

                }

            });

    }


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 1 回答
  • 0 關(guān)注
  • 150 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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