在上一篇文章【(轉載)很是完善的Log4net配置詳細說明】介紹了Log4Net的配置說明,若是不知道的能夠去看看,這裏咱們就介紹一下日誌記錄的實現,說得都比較基礎,因此大神請繞過。html
前面介紹了了Log4Net的配置,這裏我在把我用的額Log4Net 的配置信息展現出來數據庫
<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>
裏面配置了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註冊擴展字段。app
例如:C#代碼ide
LogManager.Info("測試擴展字段", () => { LogicalThreadContext.Properties["LogType"] = "擴展字段內容"; });
這樣的字段擴展,能夠保存到數據庫,也能夠與第三方傳值字段對接,是否是很方便。測試
Log4Net的基本實現,就先介紹到這裏。原本計劃把與Kibana結合也一塊兒寫了,結果發現Kibana結合到具體項目例子,才更方便講解。因此接下來,我將開始介紹一些單個的模塊實現,而後在基於這些模塊,搭建一個簡單的項目,而後在基於這個項目,寫一些項目應用的文章。spa