網站首頁 編程語言 正文
前言
在之前的文章中有講到AspNetCore多環境配置文件的應用,我們根據自己多種環境分別配置多個appsettings.$EnvironmentName.json文件。
在實際的開發中我們可能會遇到不只一個配置文件,如當我們使用log4net日志庫時,喜歡使用單獨的log4net.config配置文件。并且我們還遇到不同環境下的配置文件還存在差異。這時我們可能可以效仿appsettings.json多環境配置的風格實現多環境配置文件。
配置log4net
新建Web項目
安裝Microsoft.Extensions.Logging.Log4Net.AspNetCore
創建兩個環境的配置文件分別如圖,并設置文件屬性使其在發布時能夠復制到根目錄
兩個配置文件內容如下,例如我們這里生產環境的配置文件多增加一個KafkaAppender使日志發送至kafka消息丟列中,然后kafka的消費者將日志消費至ES集群,而本地開發的日志則沒必要進行上傳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配置如下圖
// ===============多環境log4net配置===============
IWebHostEnvironment environment = builder.Environment;
var configName = "log4net" + (environment.IsProduction() ? string.Empty : environment.EnvironmentName) + ".config";
builder.Logging.AddLog4Net(configName, watch: true);
// ===============多環境log4net配置===============
現在所有的配置都完成了。
總結
原文鏈接:https://www.cnblogs.com/springhgui/p/16163431.html
相關推薦
- 2022-08-30 python在文件中倒序查找個關鍵詞
- 2022-09-21 淺析C++函數模板和類模板_C 語言
- 2022-12-26 kubernetes數據持久化StorageClass動態供給實現詳解_云和虛擬化
- 2022-07-02 Oracle數據庫報ORA-4031的應急處理辦法
- 2022-03-29 C#算法之兩數之和_C#教程
- 2022-04-03 Python?webargs?模塊的簡單使用_python
- 2022-08-20 Oracle刪除歸檔日志及添加定時任務_oracle
- 2022-06-22 C語言詳解判斷相同樹案例分析_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支