一、前言 在上一篇文章【(轉載)非常完善的Log4net配置詳細說明】介紹了Log4Net的配置說明,如果不知道的可以去看看,這裡我們就介紹一下日誌記錄的實現,說得都比較基礎,所以大神請繞過。 二、Log4Net實現 前面介紹了了Log4Net的配置,這裡我在把我用的額Log4Net 的配置信息展示 ...
一、前言
在上一篇文章【(轉載)非常完善的Log4net配置詳細說明】介紹了Log4Net的配置說明,如果不知道的可以去看看,這裡我們就介紹一下日誌記錄的實現,說得都比較基礎,所以大神請繞過。
二、Log4Net實現
前面介紹了了Log4Net的配置,這裡我在把我用的額Log4Net 的配置信息展示出來
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<log4net debug="false"> <root> <level value="ALL" /> </root> <logger name="PFTLog"> <level value="DEBUG"/> <appender-ref ref="ErrorRollingFileAppender" /> <appender-ref ref="DebugRollingFileAppender" /> <appender-ref ref="InfoRollingFileAppender" /> </logger> <!--數據日誌--> <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Info\" /> <appendToFile value="true" /> <!--記錄日誌寫入文件時,不鎖定文本文件,防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多產生的日誌文件數,超過則只保留最新的n個。設定值value="-1"為不限文件數--> <MaxSizeRollBackups value="20" /> <!--是否只寫到一個文件中--> <StaticLogFileName value="false" /> <!--按照何種方式產生多個日誌文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期產生文件夾和文件名[在日期方式與混合方式下使用]--> <!--這是按日期產生文件夾,併在文件名前也加上日期--> <datePattern value="yyyyMMdd-"-Info.log"" /> <!--每個文件的大小。 只在混合方式與文件大小方式下使用。 超出大小後在所有文件名後自動增加正整數重新命名,數字最大的最早寫入。可用的單位:KB|MB|GB。 不要使用小數,否則會一直寫入當前日誌--> <maximumFileSize value="1MB" /> <!--計數類型為1,2,3…--> <!--<CountDirection value="1" />--> <!--記錄的格式。一般用log4net.Layout.PatternLayout佈局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n記錄時間:%date %n線程ID[%thread] %n日誌級別:%-5level %n記錄類:%logger %n擴展信息:%property -%n異常:%exception %n錯誤描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!--錯誤日誌--> <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Error\" /> <appendToFile value="true" /> <!--記錄日誌寫入文件時,不鎖定文本文件,防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多產生的日誌文件數,超過則只保留最新的n個。設定值value="-1"為不限文件數--> <MaxSizeRollBackups value="20" /> <!--是否只寫到一個文件中--> <StaticLogFileName value="false" /> <!--按照何種方式產生多個日誌文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期產生文件夾和文件名[在日期方式與混合方式下使用]--> <!--這是按日期產生文件夾,併在文件名前也加上日期--> <datePattern value="yyyyMMdd"-Error.log"" /> <!--每個文件的大小。 只在混合方式與文件大小方式下使用。 超出大小後在所有文件名後自動增加正整數重新命名,數字最大的最早寫入。可用的單位:KB|MB|GB。 不要使用小數,否則會一直寫入當前日誌--> <maximumFileSize value="1MB" /> <!--計數類型為1,2,3…--> <!--<CountDirection value="1" />--> <!--記錄的格式。一般用log4net.Layout.PatternLayout佈局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n記錄時間:%date %n線程ID[%thread] %n日誌級別:%-5level %n記錄類:%logger %n擴展信息:%property -%n異常:%exception %n錯誤描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!--調試日誌--> <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="LogFile\Debug\" /> <appendToFile value="true" /> <!--記錄日誌寫入文件時,不鎖定文本文件,防止多線程時不能寫Log,官方說線程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <Encoding value="UTF-8" /> <!--最多產生的日誌文件數,超過則只保留最新的n個。設定值value="-1"為不限文件數--> <MaxSizeRollBackups value="20" /> <!--是否只寫到一個文件中--> <StaticLogFileName value="false" /> <!--按照何種方式產生多個日誌文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value="Composite" /> <!--按日期產生文件夾和文件名[在日期方式與混合方式下使用]--> <!--這是按日期產生文件夾,併在文件名前也加上日期--> <datePattern value="yyyyMMdd"-Debug.log"" /> <!--每個文件的大小。 只在混合方式與文件大小方式下使用。 超出大小後在所有文件名後自動增加正整數重新命名,數字最大的最早寫入。可用的單位:KB|MB|GB。 不要使用小數,否則會一直寫入當前日誌--> <maximumFileSize value="1MB" /> <!--計數類型為1,2,3…--> <!--<CountDirection value="1" />--> <!--記錄的格式。一般用log4net.Layout.PatternLayout佈局--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%n記錄時間:%date %n線程ID[%thread] %n日誌級別:%-5level %n記錄類:%logger %n擴展信息:%property -%n異常:%exception %n錯誤描述:%message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="DEBUG" /> </filter> </appender> </log4net>View Code
裡面配置了3個日誌的等級(ERROR,DEBUG和INFO),根據日誌的不同等級,記錄到對應的文件裡面。
下麵是具體的實現代碼
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] namespace PFT.Standard { public class PFTLog { private static ILog log = LogManager.GetLogger(Assembly.GetCallingAssembly(), "PFTLog"); public static void Error(string message, Action RegistedProperties) { RegistedProperties(); log.Error(message); } public static void Error(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Error(message, exception); } public static void Error(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Error("系統Error信息", exception); } public static void Debug(string message, Action RegistedProperties) { RegistedProperties(); log.Debug(message); } public static void Debug(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug(message, exception); } public static void Debug(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug("系統Debug信息", exception); } public static void Info(string message, Action RegistedProperties) { RegistedProperties(); log.Info(message); } public static void Info(string message, Exception exception, Action RegistedProperties) { RegistedProperties(); log.Debug(message, exception); } public static void Info(Exception exception, Action RegistedProperties) { RegistedProperties(); log.Info("系統Info信息", exception); } } }
其中RegistedProperties註冊擴展欄位。
例如:C#代碼
LogManager.Info("測試擴展欄位", () => { LogicalThreadContext.Properties["LogType"] = "擴展欄位內容"; });
這樣的欄位擴展,可以保存到資料庫,也可以與第三方傳值欄位對接,是不是很方便。
三、總結
Log4Net的基本實現,就先介紹到這裡。本來計劃把與Kibana結合也一起寫了,結果發現Kibana結合到具體項目例子,才更方便講解。所以接下來,我將開始介紹一些單個的模塊實現,然後在基於這些模塊,搭建一個簡單的項目,然後在基於這個項目,寫一些項目應用的文章。