Asp.Net?Core配置多環(huán)境log4net配置文件的全過程
前言
在之前的文章中有講到AspNetCore多環(huán)境配置文件的應(yīng)用,我們根據(jù)自己多種環(huán)境分別配置多個(gè)appsettings.$EnvironmentName.json文件。
在實(shí)際的開發(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集群,而本地開發(fā)的日志則沒必要進(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)文章
一個(gè)簡(jiǎn)單的asp.net 單點(diǎn)登錄實(shí)現(xiàn)
上次做了學(xué)校的火車訂票系統(tǒng),那邊要求要從學(xué)生信息平臺(tái)直接點(diǎn)過來就是登錄狀態(tài),不用在重新登錄。學(xué)生信息平臺(tái)原來是用asp做的,而火車訂票系統(tǒng)是asp.net做的。兩個(gè)網(wǎng)站的學(xué)生信息調(diào)用的是同一個(gè)數(shù)據(jù)庫(kù)。2009-11-11
JS實(shí)現(xiàn)完美include加載功能代碼
在寫這個(gè)之前在網(wǎng)上搜索了些資料,發(fā)現(xiàn)以前寫的include都存在2個(gè)問題,這也是include需要解決的比較重要的2個(gè)問題。2010-10-10
關(guān)于asp.net button按鈕的OnClick和OnClientClick事件
OnClick是button的服務(wù)器端事件 OnClientClick是button的客戶端事件2009-05-05
C#/.NET使用git命令行來操作git倉(cāng)庫(kù)的方法示例
本文介紹使用 C# 編寫一個(gè) .NET 程序來自動(dòng)化地使用 git 命令行來操作 git 倉(cāng)庫(kù)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
httpHandler實(shí)現(xiàn).Net無后綴名Web訪問的實(shí)現(xiàn)解析
有時(shí)候我們看到很多網(wǎng)站是網(wǎng)址是沒有后綴名的,其實(shí).net中可以通過httpHandler來實(shí)現(xiàn)。2011-10-10
asp.net微信開發(fā)(已關(guān)注用戶管理)
這篇文章主要介紹了asp.net微信開發(fā)中有關(guān)已關(guān)注用戶管理的相關(guān)內(nèi)容,需要的朋友可以參考下2015-11-11
遞歸輸出ASP.NET頁(yè)面所有控件的類型和ID的代碼
遞歸輸出ASP.NET頁(yè)面所有控件的類型和ID的代碼,需要的朋友可以參考下。2012-01-01

