Asp.Net?Core配置多環(huán)境log4net配置文件的全過(guò)程
前言
在之前的文章中有講到AspNetCore多環(huán)境配置文件的應(yīng)用,我們根據(jù)自己多種環(huán)境分別配置多個(gè)appsettings.$EnvironmentName.json文件。
在實(shí)際的開(kāi)發(fā)中我們可能會(huì)遇到不只一個(gè)配置文件,如當(dāng)我們使用log4net日志庫(kù)時(shí),喜歡使用單獨(dú)的log4net.config配置文件。并且我們還遇到不同環(huán)境下的配置文件還存在差異。這時(shí)我們可能可以效仿appsettings.json多環(huán)境配置的風(fēng)格實(shí)現(xiàn)多環(huán)境配置文件。
配置log4net
新建Web項(xiàng)目
安裝Microsoft.Extensions.Logging.Log4Net.AspNetCore
創(chuàng)建兩個(gè)環(huán)境的配置文件分別如圖,并設(shè)置文件屬性使其在發(fā)布時(shí)能夠復(fù)制到根目錄
兩個(gè)配置文件內(nèi)容如下,例如我們這里生產(chǎn)環(huán)境的配置文件多增加一個(gè)KafkaAppender使日志發(fā)送至kafka消息丟列中,然后kafka的消費(fèi)者將日志消費(fèi)至ES集群,而本地開(kāi)發(fā)的日志則沒(méi)必要進(jìn)行上傳ES。
<!--log4net.config--> <?xml version="1.0" encoding="utf-8" ?> <log4net> <!-- If you are looking here and want more output, first thing to do is change root/priority/@value to "INFO" or "ALL". --> <root> Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF. <priority value="ALL" /> <appender-ref ref="error-file" /> <appender-ref ref="debug-file" /> <appender-ref ref="KafkaAppender" /> </root> <!-- Example of turning on the output from a component or namespace. --> <logger name="Common"> <appender-ref ref="debugger"/> <priority value="DEBUG" /> </logger> <appender name="KafkaAppender" type="log4net.Kafka.Appender.KafkaAppender, log4net.Kafka.Appender"> <KafkaSettings> <brokers> <add value="127.0.0.1:9092" /> </brokers> <topic type="log4net.Layout.PatternLayout"> <conversionPattern value="kafka.logstash" /> </topic> </KafkaSettings> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level% [%t] %logger - %message" /> </layout> </appender> <appender name="debugger" type="log4net.Appender.DebugAppender"> <!-- Sends log messages to Visual Studio if attached. --> <immediateFlush value="true" /> <layout type="log4net.Layout.SimpleLayout" /> </appender> <appender name="debug-file" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file value="Logs/debug" /> <appendToFile value="true" /> <!-- Immediate flush on error log, to avoid data loss with sudden termination. --> <immediateFlush value="true" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <datepattern value="-yyyy.MM.dd'.log'" /> <!-- Prevents Orchard.exe from displaying locking debug messages. --> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level% [%property{trace}] %logger - %message%newline" /> </layout> </appender> <appender name="error-file" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file value="Logs/error" /> <appendToFile value="true" /> <!-- Immediate flush on error log, to avoid data loss with sudden termination. --> <immediateFlush value="true" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <datepattern value="-yyyy.MM.dd'.log'" /> <!-- Prevents Orchard.exe from displaying locking debug messages. --> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <filter type="log4net.Filter.LevelRangeFilter"> <!-- Only ERROR and FATAL log messages end up in this target, even if child loggers accept lower priority. --> <levelMin value="ERROR" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%t] %logger - %message [%P{Url}]%newline" /> </layout> </appender> </log4net>
<!--log4net.Development.config--> <?xml version="1.0" encoding="utf-8" ?> <log4net> <!-- If you are looking here and want more output, first thing to do is change root/priority/@value to "INFO" or "ALL". --> <root> Value of priority may be ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF. <priority value="ALL" /> <appender-ref ref="error-file" /> <appender-ref ref="debug-file" /> </root> <!-- Example of turning on the output from a component or namespace. --> <logger name="Common"> <appender-ref ref="debugger"/> <priority value="DEBUG" /> </logger> <appender name="debugger" type="log4net.Appender.DebugAppender"> <!-- Sends log messages to Visual Studio if attached. --> <immediateFlush value="true" /> <layout type="log4net.Layout.SimpleLayout" /> </appender> <appender name="debug-file" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file value="Logs/debug" /> <appendToFile value="true" /> <!-- Immediate flush on error log, to avoid data loss with sudden termination. --> <immediateFlush value="true" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <datepattern value="-yyyy.MM.dd'.log'" /> <!-- Prevents Orchard.exe from displaying locking debug messages. --> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level% [%property{trace}] %logger - %message%newline" /> </layout> </appender> <appender name="error-file" type="log4net.Appender.RollingFileAppender"> <param name="Encoding" value="utf-8" /> <file value="Logs/error" /> <appendToFile value="true" /> <!-- Immediate flush on error log, to avoid data loss with sudden termination. --> <immediateFlush value="true" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <datepattern value="-yyyy.MM.dd'.log'" /> <!-- Prevents Orchard.exe from displaying locking debug messages. --> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <filter type="log4net.Filter.LevelRangeFilter"> <!-- Only ERROR and FATAL log messages end up in this target, even if child loggers accept lower priority. --> <levelMin value="ERROR" /> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%t] %logger - %message [%P{Url}]%newline" /> </layout> </appender> </log4net>
在Program.cs中添加log4net配置如下圖
// ===============多環(huán)境log4net配置=============== IWebHostEnvironment environment = builder.Environment; var configName = "log4net" + (environment.IsProduction() ? string.Empty : environment.EnvironmentName) + ".config"; builder.Logging.AddLog4Net(configName, watch: true); // ===============多環(huán)境log4net配置===============
現(xiàn)在所有的配置都完成了。
總結(jié)
到此這篇關(guān)于Asp.Net Core配置多環(huán)境log4net配置文件的文章就介紹到這了,更多相關(guān)AspNetCore多環(huán)境log4net配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET中的Menu控件的應(yīng)用及XmlDataSource的了解
以前一直以為菜單都是通過(guò)sitemap制作的,最近看到項(xiàng)目中的方法是使用XmlDataSource榜定的,很是好奇,于是研究了一下,感覺(jué)還不錯(cuò)哦,感興趣的朋友也可以了解下啊,或許本文所提供的對(duì)你學(xué)習(xí)有所幫助呢2013-02-02ASP.NET MVC傳送參數(shù)至服務(wù)端詳解及實(shí)例
這篇文章主要介紹了ASP.NET MVC傳送參數(shù)至服務(wù)端詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-11-11linq to sql中,如何解決多條件查詢問(wèn)題,答案,用表達(dá)式樹(shù)!
有個(gè)小項(xiàng)目中,用到了linq to sql,既然這樣,想必需要做多條件組合查詢了,雖然我對(duì)表達(dá)式樹(shù)的研究也只是寥寥地,但除此方法,似乎別無(wú)他法,只好硬著頭皮研究一下.2011-08-08.NET使用原生方法實(shí)現(xiàn)文件壓縮和解壓的詳細(xì)過(guò)程
這篇文章主要介紹了.NET使用原生方法實(shí)現(xiàn)文件壓縮和解壓,本文我們主要講的是如何使用.NET原生方法System.IO.Compression命名空間中的類來(lái)對(duì)文件和文件夾進(jìn)行壓縮或解壓縮(壓縮格式.zip文件格式),需要的朋友可以參考下2024-06-06asp.net中Word轉(zhuǎn)Html的辦法(不需要WORD組件)
最近碰到一個(gè)需求,在文本編輯器中實(shí)現(xiàn)“Word導(dǎo)入”功能 發(fā)現(xiàn)了幾種方法,只是作為總結(jié)使用2013-04-04密碼綁定至密碼文本框中(TextMode設(shè)為Password)
一般情況之下TextBox的TextMode設(shè)為Password話,我們想在后臺(tái)(.cs)綁定一個(gè)值至此文本框,是無(wú)法實(shí)現(xiàn)的,如果一定要綁定值的話,該如何實(shí)現(xiàn)呢?,本文將告訴你實(shí)現(xiàn)方法,感興趣的朋友可以參考下2013-01-01