最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > c#教程 >
  • C#教程之基于Log4Net本地日志服務簡單實現

  • 2019-04-13 21:21 來源:未知

背景#

  1. 項目開發中,我們或多或少會使用諸如NLog,Log4Net,Kafka+ELK等等日志套件;

  2. 基于關注點分離原則,業務開發的時候不應該關注日志具體實現;并且后續能方便切換其他日志套件;

  3. 這里先實現基于文件的日志服務,在下一篇將實現基于Kafka+ELK;

  4. 具體源碼:MasterChief

  5. Nuget:Install-Package MasterChief.DotNet.Core.Log

  6. 歡迎Star,歡迎Issues;

日志接口定義#


	
Copy
/// <summary> /// 日志記錄接口 /// </summary> public interface ILogService { #region Methods /// <summary> /// Debug記錄 /// </summary> /// <param name="message">日志信息</param> void Debug(string message); /// <summary> /// Debug記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> void Debug(string message, Exception ex); /// <summary> /// Error記錄 /// </summary> /// <param name="message">日志信息</param> void Error(string message); /// <summary> /// Error記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> void Error(string message, Exception ex); /// <summary> /// Fatal記錄 /// </summary> /// <param name="message">日志信息</param> void Fatal(string message); /// <summary> /// Fatal記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> void Fatal(string message, Exception ex); /// <summary> /// Info記錄 /// </summary> /// <param name="message">日志信息</param> void Info(string message); /// <summary> /// Info記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> void Info(string message, Exception ex); /// <summary> /// Warn記錄 /// </summary> /// <param name="message">日志信息</param> void Warn(string message); /// <summary> /// Warn記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> void Warn(string message, Exception ex); #endregion Methods }

基于Log4Net本地文件日志服務實現#


	
Copy
/// <summary> /// 基于Log4Net的文件日志記錄 /// </summary> public sealed class FileLogService : ILogService { #region Constructors static FileLogService() { DebugLogger = LogManager.GetLogger(DebugLoggerName); InfoLogger = LogManager.GetLogger(InfoLoggerName); WarnLogger = LogManager.GetLogger(WarnLoggerName); ErrorLogger = LogManager.GetLogger(ErrorLoggerName); FatalLogger = LogManager.GetLogger(FatalLoggerName); } #endregion Constructors #region Fields /// <summary> /// The debug logger name /// </summary> public const string DebugLoggerName = "DEBUG_FileLogger"; /// <summary> /// The error logger name /// </summary> public const string ErrorLoggerName = "ERROR_FileLogger"; /// <summary> /// The fatal logger name /// </summary> public const string FatalLoggerName = "FATAL_FileLogger"; /// <summary> /// The information logger name /// </summary> public const string InfoLoggerName = "INFO_FileLogger"; /// <summary> /// The warn logger name /// </summary> public const string WarnLoggerName = "WARN_FileLogger"; /// <summary> /// The debug logger /// </summary> public static readonly ILog DebugLogger; /// <summary> /// The error logger /// </summary> public static readonly ILog ErrorLogger; /// <summary> /// The fatal logger /// </summary> public static readonly ILog FatalLogger; /// <summary> /// The information logger /// </summary> public static readonly ILog InfoLogger; /// <summary> /// The warn logger /// </summary> public static readonly ILog WarnLogger; #endregion Fields #region Methods /// <summary> /// Debug記錄 /// </summary> /// <param name="message">日志信息</param> public void Debug(string message) { if (DebugLogger.IsDebugEnabled) DebugLogger.Debug(message); } /// <summary> /// Debug記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> public void Debug(string message, Exception ex) { if (DebugLogger.IsDebugEnabled) DebugLogger.Debug(message, ex); } /// <summary> /// Error記錄 /// </summary> /// <param name="message">日志信息</param> public void Error(string message) { if (ErrorLogger.IsErrorEnabled) ErrorLogger.Error(message); } /// <summary> /// Error記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> public void Error(string message, Exception ex) { if (ErrorLogger.IsErrorEnabled) ErrorLogger.Error(message, ex); } /// <summary> /// Fatal記錄 /// </summary> /// <param name="message">日志信息</param> public void Fatal(string message) { if (FatalLogger.IsFatalEnabled) FatalLogger.Fatal(message); } /// <summary> /// Fatal記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> public void Fatal(string message, Exception ex) { if (FatalLogger.IsFatalEnabled) FatalLogger.Fatal(message, ex); } /// <summary> /// Info記錄 /// </summary> /// <param name="message">日志信息</param> public void Info(string message) { if (InfoLogger.IsInfoEnabled) InfoLogger.Info(message); } /// <summary> /// Info記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> public void Info(string message, Exception ex) { if (InfoLogger.IsInfoEnabled) InfoLogger.Info(message, ex); } /// <summary> /// Warn記錄 /// </summary> /// <param name="message">日志信息</param> public void Warn(string message) { if (WarnLogger.IsWarnEnabled) WarnLogger.Warn(message); } /// <summary> /// Warn記錄 /// </summary> /// <param name="message">日志信息</param> /// <param name="ex">異常信息</param> public void Warn(string message, Exception ex) { if (WarnLogger.IsWarnEnabled) WarnLogger.Warn(message, ex); } #endregion Methods }

Log4Net 配置文件#


	
Copy
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" /> </configSections> <log4net> <!-- FileLogger --> <logger name="FATAL_FileLogger"> <level value="ALL" /> <appender-ref ref="FATAL_FileAppender" /> </logger> <logger name="ERROR_FileLogger"> <level value="ALL" /> <appender-ref ref="ERROR_FileAppender" /> </logger> <logger name="WARN_FileLogger"> <level value="ALL" /> <appender-ref ref="WARN_FileAppender" /> </logger> <logger name="INFO_FileLogger"> <level value="ALL" /> <appender-ref ref="INFO_FileAppender" /> </logger> <logger name="DEBUG_FileLogger"> <level value="ALL" /> <appender-ref ref="DEBUG_FileAppender" /> </logger> <!-- AdoNetLogger --> <!--<logger name="AdoNetLogger"> <level value="ALL" /> <appender-ref ref="AdoNetAppender" /> </logger>--> <!-- ConsoleLogger --> <logger name="ConsoleLogger"> <level value="ALL" /> <appender-ref ref="ColoredConsoleAppender" /> </logger> <!--使用Rolling方式記錄日志按照日來記錄日志--> <appender name="FATAL_FileAppender" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相對路徑,也可以絕對路徑,這里只給定了文件夾--> <file value=".\log\\FATAL\\" /> <!--是否增加文件--> <appendToFile value="true" /> <maxSizeRollBackups value="5" /> <!--日志追加類型,Date為按日期增加文件,Size為按大小--> <rollingStyle value="Date" /> <!--最小鎖定模型以允許多個進程可以寫入同一個文件,解決文件獨占問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件后綴--> <datePattern value="yyyyMM\\yyyy-MM-dd&quot;.log&quot;" /> <!--是否固定文件名--> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="---------------------------------------------------%newline發生時間:%date %newline事件級別:%-5level %newline事件來源:%logger%newline日志內容:%message%newline" /> </layout> </appender> <appender name="ERROR_FileAppender" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相對路徑,也可以絕對路徑,這里只給定了文件夾--> <file value=".\log\\ERROR\\" /> <!--是否增加文件--> <appendToFile value="true" /> <maxSizeRollBackups value="5" /> <!--日志追加類型,Date為按日期增加文件,Size為按大小--> <rollingStyle value="Date" /> <!--最小鎖定模型以允許多個進程可以寫入同一個文件,解決文件獨占問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件后綴--> <datePattern value="yyyyMM\\yyyy-MM-dd&quot;.log&quot;" /> <!--是否固定文件名--> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="---------------------------------------------------%newline發生時間:%date %newline事件級別:%-5level %newline事件來源:%logger%newline日志內容:%message%newline" /> </layout> </appender> <appender name="WARN_FileAppender" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相對路徑,也可以絕對路徑,這里只給定了文件夾--> <file value=".\log\\WARN\\" /> <!--是否增加文件--> <appendToFile value="true" /> <maxSizeRollBackups value="5" /> <!--日志追加類型,Date為按日期增加文件,Size為按大小--> <rollingStyle value="Date" /> <!--最小鎖定模型以允許多個進程可以寫入同一個文件,解決文件獨占問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件后綴--> <datePattern value="yyyyMM\\yyyy-MM-dd&quot;.log&quot;" /> <!--是否固定文件名--> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="---------------------------------------------------%newline發生時間:%date %newline事件級別:%-5level %newline事件來源:%logger%newline日志內容:%message%newline" /> </layout> </appender> <appender name="INFO_FileAppender" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相對路徑,也可以絕對路徑,這里只給定了文件夾--> <file value=".\log\\INFO\\" /> <!--是否增加文件--> <appendToFile value="true" /> <maxSizeRollBackups value="5" /> <!--日志追加類型,Date為按日期增加文件,Size為按大小--> <rollingStyle value="Date" /> <!--最小鎖定模型以允許多個進程可以寫入同一個文件,解決文件獨占問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件后綴--> <datePattern value="yyyyMM\\yyyy-MM-dd&quot;.log&quot;" /> <!--是否固定文件名--> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="---------------------------------------------------%newline發生時間:%date %newline事件級別:%-5level %newline事件來源:%logger%newline日志內容:%message%newline" /> </layout> </appender> <appender name="DEBUG_FileAppender" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相對路徑,也可以絕對路徑,這里只給定了文件夾--> <file value=".\log\\DEBUG\\" /> <!--是否增加文件--> <appendToFile value="true" /> <maxSizeRollBackups value="5" /> <!--日志追加類型,Date為按日期增加文件,Size為按大小--> <rollingStyle value="Date" /> <!--最小鎖定模型以允許多個進程可以寫入同一個文件,解決文件獨占問題--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <!--最大文件大小--> <maximumFileSize value="10MB" /> <!--文件命名格式,非日期參數化要進行轉義,如自定義文件后綴--> <datePattern value="yyyyMM\\yyyy-MM-dd&quot;.log&quot;" /> <!--是否固定文件名--> <staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="---------------------------------------------------%newline發生時間:%date %newline事件級別:%-5level %newline事件來源:%logger%newline日志內容:%message%newline" /> </layout> </appender> <!--使用AdoNetAppender方式記錄日志按照日來記錄日志-->
pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
手机攒劲甘肃麻将怎么下载挂 中国福彩手机版刮刮乐 35选7开奖结果查询 飞艇计划软件app下载苹果客户端 拍照赚钱任务意义 昧着良心赚钱什么意思 诺亚传说商人赚钱吗 抖音壁纸滚去赚钱 红警之索马里