一、前言

          在上一篇文章【(轉(zhuǎn)載)非常完善的Log4net配置詳細(xì)說明
          <https://www.cnblogs.com/snailblog/p/11484027.html>
          】介紹了Log4Net的配置說明,如果不知道的可以去看看,這里我們就介紹一下日志記錄的實(shí)現(xiàn),說得都比較基礎(chǔ),所以大神請繞過。

          二、Log4Net實(shí)現(xiàn)

          前面介紹了了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> <!--數(shù)據(jù)日志--> <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" />
          <!--最多產(chǎn)生的日志文件數(shù),超過則只保留最新的n個。設(shè)定值value="-1"為不限文件數(shù)--> <MaxSizeRollBackups value="20"
          /> <!--是否只寫到一個文件中--> <StaticLogFileName value="false" />
          <!--按照何種方式產(chǎn)生多個日志文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value=
          "Composite" /> <!--按日期產(chǎn)生文件夾和文件名[在日期方式與混合方式下使用]--> <!--這是按日期產(chǎn)生文件夾,并在文件名前也加上日期-->
          <datePattern value="yyyyMMdd-"-Info.log"" /> <!--每個文件的大小。
          只在混合方式與文件大小方式下使用。 超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?KB|MB|GB。
          不要使用小數(shù),否則會一直寫入當(dāng)前日志--> <maximumFileSize value="1MB" /> <!--計(jì)數(shù)類型為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擴(kuò)展信息:%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" />
          <!--最多產(chǎn)生的日志文件數(shù),超過則只保留最新的n個。設(shè)定值value="-1"為不限文件數(shù)--> <MaxSizeRollBackups value="20"
          /> <!--是否只寫到一個文件中--> <StaticLogFileName value="false" />
          <!--按照何種方式產(chǎn)生多個日志文件(日期[Date],文件大小[Size],混合[Composite])--> <rollingStyle value=
          "Composite" /> <!--按日期產(chǎn)生文件夾和文件名[在日期方式與混合方式下使用]--> <!--這是按日期產(chǎn)生文件夾,并在文件名前也加上日期-->
          <datePattern value="yyyyMMdd"-Error.log"" /> <!--每個文件的大小。
          只在混合方式與文件大小方式下使用。 超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?KB|MB|GB。
          不要使用小數(shù),否則會一直寫入當(dāng)前日志--> <maximumFileSize value="1MB" /> <!--計(jì)數(shù)類型為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擴(kuò)展信息:%property -%n異常:%exception
          %n錯誤描述:%message%newline" /> </layout> <filter type=
          "log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <
          param name="LevelMax" value="ERROR" /> </filter> </appender> <!--調(diào)試日志--> <
          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" /> <!--最多產(chǎn)生的日志文件數(shù),超過則只保留最新的n個。設(shè)定值value="-1"為不限文件數(shù)--> <
          MaxSizeRollBackups value="20" /> <!--是否只寫到一個文件中--> <StaticLogFileName value=
          "false" /> <!--按照何種方式產(chǎn)生多個日志文件(日期[Date],文件大小[Size],混合[Composite])--> <
          rollingStyle value="Composite" /> <!--按日期產(chǎn)生文件夾和文件名[在日期方式與混合方式下使用]-->
          <!--這是按日期產(chǎn)生文件夾,并在文件名前也加上日期--> <datePattern value=
          "yyyyMMdd"-Debug.log"" /> <!--每個文件的大小。 只在混合方式與文件大小方式下使用。
          超出大小后在所有文件名后自動增加正整數(shù)重新命名,數(shù)字最大的最早寫入??捎玫膯挝?KB|MB|GB。 不要使用小數(shù),否則會一直寫入當(dāng)前日志--> <
          maximumFileSize value="1MB" /> <!--計(jì)數(shù)類型為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擴(kuò)展信息:%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),根據(jù)日志的不同等級,記錄到對應(yīng)的文件里面。

          下面是具體的實(shí)現(xiàn)代碼
          [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("系統(tǒng)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("系統(tǒng)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("系統(tǒng)Info信息", exception); } } }
          其中RegistedProperties注冊擴(kuò)展字段。

          例如:C#代碼
          LogManager.Info("測試擴(kuò)展字段", () => { LogicalThreadContext.Properties["LogType"]
          = "擴(kuò)展字段內(nèi)容"; });
          info日志文件為
          <https://img2018.cnblogs.com/blog/1764554/201909/1764554-20190908094554944-160140577.png>
          。

          這樣的字段擴(kuò)展,可以保存到數(shù)據(jù)庫,也可以與第三方傳值字段對接,是不是很方便。

          三、總結(jié)


          Log4Net的基本實(shí)現(xiàn),就先介紹到這里。本來計(jì)劃把與Kibana結(jié)合也一起寫了,結(jié)果發(fā)現(xiàn)Kibana結(jié)合到具體項(xiàng)目例子,才更方便講解。所以接下來,我將開始介紹一些單個的模塊實(shí)現(xiàn),然后在基于這些模塊,搭建一個簡單的項(xiàng)目,然后在基于這個項(xiàng)目,寫一些項(xiàng)目應(yīng)用的文章。

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                精品亚洲天堂 | 免费A级特黄真人大片 | 亚洲Av无码成人专区擼 | 亚洲AV成人片无码好多水 | 非洲黄片儿 |