1. 程式人生 > >用 Log4Net 三步實現 .Net Core 類庫 分日誌等級(不同檔案目錄)存日誌

用 Log4Net 三步實現 .Net Core 類庫 分日誌等級(不同檔案目錄)存日誌

1,建立.Net Core  Web 專案,引入 log4net

2,建立類庫,新增如下 helper方法

  1 using log4net;
  2 using log4net.Config;
  3 using System;
  4 using System.IO;
  5 
  6 namespace Chf.Log
  7 {
  8     /// <summary>
  9     /// Log4Net Helper 2018-12-16 19:15:00  
 10     /// 日誌等級:OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL
11 /// </summary> 12 public sealed class LogHelper 13 { 14 private static ILog logger; 15 16 static LogHelper() 17 { 18 if (logger == null) 19 { 20 var repository = LogManager.CreateRepository("Chf.Web"); 21 //
指定配置檔案 22 XmlConfigurator.Configure(repository, new FileInfo("Config//log4netTwo.config")); 23 logger = LogManager.GetLogger(repository.Name, "RollingLogFileAppender"); 24 } 25 } 26 27 /// <summary> 28 /// 除錯資訊 29 /// </summary>
30 /// <param name="message"></param> 31 /// <param name="exception"></param> 32 public static void Debug(string message, Exception exception = null) 33 { 34 if (logger.IsDebugEnabled) 35 { 36 if (exception == null) 37 logger.Debug(message); 38 else 39 logger.Debug(FormartLog(message, exception)); 40 } 41 } 42 43 /// <summary> 44 /// 一般資訊 45 /// </summary> 46 /// <param name="message"></param> 47 /// <param name="exception"></param> 48 public static void Info(string message, Exception exception = null) 49 { 50 if (logger.IsInfoEnabled) 51 { 52 if (exception == null) 53 logger.Info(message); 54 else 55 logger.Info(FormartLog(message, exception)); 56 } 57 } 58 59 /// <summary> 60 /// 警告 61 /// </summary> 62 /// <param name="message"></param> 63 /// <param name="exception"></param> 64 public static void Warn(string message, Exception exception = null) 65 { 66 if (logger.IsWarnEnabled) 67 { 68 if (exception == null) 69 logger.Warn(message); 70 else 71 logger.Warn(FormartLog(message, exception)); 72 } 73 } 74 75 /// <summary> 76 /// 一般錯誤 77 /// </summary> 78 /// <param name="message"></param> 79 /// <param name="exception"></param> 80 public static void Error(string message, Exception exception = null) 81 { 82 if (logger.IsErrorEnabled) 83 { 84 if (exception == null) 85 logger.Error(message); 86 else 87 logger.Error(FormartLog(message, exception)); 88 } 89 } 90 91 /// <summary> 92 /// 致命錯誤 93 /// </summary> 94 /// <param name="message"></param> 95 /// <param name="exception"></param> 96 public static void Fatal(string message, Exception exception = null) 97 { 98 if (logger.IsFatalEnabled) 99 { 100 if (exception == null) 101 logger.Fatal(message); 102 else 103 logger.Fatal(FormartLog(message, exception)); 104 } 105 } 106 107 108 /// <summary> 109 /// 自定義返回格式 110 /// </summary> 111 /// <param name="throwMsg"></param> 112 /// <param name="ex"></param> 113 /// <returns></returns> 114 private static string FormartLog(string throwMsg, Exception ex) 115 { 116 return string.Format("【自定義內容】:{0} \r\n【異常型別】:{1} \r\n【異常資訊】:{2} \r\n【堆疊呼叫】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); 117 } 118 } 119 }
View Code

3,Web專案,新增如下配置檔案

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <configuration>
  3   <configSections>
  4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  5   </configSections>
  6 
  7   <log4net>
  8     <!-- Debug 將日誌以回滾檔案的形式寫到檔案中 -->
  9     <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
 10       <!-- 日誌檔案存放位置,可以為絕對路徑也可以為相對路徑 -->
 11       <file value="Log\\Debug\\" />
 12       <!-- 將日誌資訊追加到已有的日誌檔案中-->
 13       <appendToFile value="true" />
 14       <param name="MaxFileSize" value="10240"/>
 15       <param name="MaxSizeRollBackups" value="100"/>
 16       <!-- 最小鎖定模式,以允許多個程序可以寫入同一個檔案 -->
 17       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 18       <!-- 指定按日期切分日誌檔案 -->
 19       <rollingStyle value="Date" />
 20       <!-- 日誌檔案的命名規則 -->
 21       <datePattern value="yyyy-MM-dd_HH_mm_ss&quot;.log&quot;" />
 22       <!-- 當將日期作為日誌檔案的名字時,必須將staticLogFileName的值設定為false -->
 23       <staticLogFileName value="false" />
 24       <layout type="log4net.Layout.PatternLayout">
 25         <conversionPattern value="【異常時間】:%date【執行緒ID】:%thread%newline【異常級別】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
 26       </layout>
 27       <filter type="log4net.Filter.LevelRangeFilter">
 28         <param name="LevelMin" value="Debug" />
 29         <param name="LevelMax" value="Debug" />
 30       </filter>
 31     </appender>
 32 
 33     <!-- Info 將日誌以回滾檔案的形式寫到檔案中 -->
 34     <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
 35       <!-- 日誌檔案存放位置,可以為絕對路徑也可以為相對路徑 -->
 36       <file value="Log\\Info\\" />
 37       <!-- 將日誌資訊追加到已有的日誌檔案中-->
 38       <appendToFile value="true" />
 39       <param name="MaxFileSize" value="10240"/>
 40       <param name="MaxSizeRollBackups" value="100"/>
 41       <!-- 最小鎖定模式,以允許多個程序可以寫入同一個檔案 -->
 42       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 43       <!-- 指定按日期切分日誌檔案 -->
 44       <rollingStyle value="Date" />
 45       <!-- 日誌檔案的命名規則 -->
 46       <datePattern value="yyyy-MM-dd_HH_mm_ss&quot;.log&quot;" />
 47       <!-- 當將日期作為日誌檔案的名字時,必須將staticLogFileName的值設定為false -->
 48       <staticLogFileName value="false" />
 49       <layout type="log4net.Layout.PatternLayout">
 50         <conversionPattern value="【異常時間】:%date【執行緒ID】:%thread%newline【異常級別】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
 51       </layout>
 52       <filter type="log4net.Filter.LevelRangeFilter">
 53         <param name="LevelMin" value="Info" />
 54         <param name="LevelMax" value="Info" />
 55       </filter>
 56     </appender>
 57 
 58     <!-- Warn 將日誌以回滾檔案的形式寫到檔案中 -->
 59     <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
 60       <!-- 日誌檔案存放位置,可以為絕對路徑也可以為相對路徑 -->
 61       <file value="Log\\Warn\\" />
 62       <!-- 將日誌資訊追加到已有的日誌檔案中-->
 63       <appendToFile value="true" />
 64       <param name="MaxFileSize" value="10240"/>
 65       <param name="MaxSizeRollBackups" value="100"/>
 66       <!-- 最小鎖定模式,以允許多個程序可以寫入同一個檔案 -->
 67       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 68       <!-- 指定按日期切分日誌檔案 -->
 69       <rollingStyle value="Date" />
 70       <!-- 日誌檔案的命名規則 -->
 71       <datePattern value="yyyy-MM-dd_HH_mm_ss&quot;.log&quot;" />
 72       <!-- 當將日期作為日誌檔案的名字時,必須將staticLogFileName的值設定為false -->
 73       <staticLogFileName value="false" />
 74       <layout type="log4net.Layout.PatternLayout">
 75         <conversionPattern value="【異常時間】:%date【執行緒ID】:%thread%newline【異常級別】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
 76       </layout>
 77       <filter type="log4net.Filter.LevelRangeFilter">
 78         <param name="LevelMin" value="Warn" />
 79         <param name="LevelMax" value="Warn" />
 80       </filter>
 81     </appender>
 82 
 83     <!-- Error 將日誌以回滾檔案的形式寫到檔案中 -->
 84     <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
 85       <!-- 日誌檔案存放位置,可以為絕對路徑也可以為相對路徑 -->
 86       <file value="Log\\Error\\" />
 87       <!-- 將日誌資訊追加到已有的日誌檔案中-->
 88       <appendToFile value="true" />
 89       <param name="MaxFileSize" value="10240"/>
 90       <param name="MaxSizeRollBackups" value="100"/>
 91       <!-- 最小鎖定模式,以允許多個程序可以寫入同一個檔案 -->
 92       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
 93       <!-- 指定按日期切分日誌檔案 -->
 94       <rollingStyle value="Date" />
 95       <!-- 日誌檔案的命名規則 -->
 96       <datePattern value="yyyy-MM-dd_HH_mm_ss&quot;.log&quot;" />
 97       <!-- 當將日期作為日誌檔案的名字時,必須將staticLogFileName的值設定為false -->
 98       <staticLogFileName value="false" />
 99       <layout type="log4net.Layout.PatternLayout">
100         <conversionPattern value="【異常時間】:%date【執行緒ID】:%thread%newline【異常級別】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
101       </layout>
102       <filter type="log4net.Filter.LevelRangeFilter">
103         <param name="LevelMin" value="Error" />
104         <param name="LevelMax" value="Error" />
105       </filter>
106     </appender>
107 
108     <!-- Fatal 將日誌以回滾檔案的形式寫到檔案中 -->
109     <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender">
110       <!-- 日誌檔案存放位置,可以為絕對路徑也可以為相對路徑 -->
111       <file value="Log\\Fatal\\" />
112       <!-- 將日誌資訊追加到已有的日誌檔案中-->
113       <appendToFile value="true" />
114       <param name="MaxFileSize" value="10240"/>
115       <param name="MaxSizeRollBackups" value="100"/>
116       <!-- 最小鎖定模式,以允許多個程序可以寫入同一個檔案 -->
117       <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
118       <!-- 指定按日期切分日誌檔案 -->
119       <rollingStyle value="Date" />
120       <!-- 日誌檔案的命名規則 -->
121       <datePattern value="yyyy-MM-dd_HH_mm_ss&quot;.log&quot;" />
122       <!-- 當將日期作為日誌檔案的名字時,必須將staticLogFileName的值設定為false -->
123       <staticLogFileName value="false" />
124       <layout type="log4net.Layout.PatternLayout">
125         <conversionPattern value="【異常時間】:%date【執行緒ID】:%thread%newline【異常級別】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
126       </layout>
127       <filter type="log4net.Filter.LevelRangeFilter">
128         <param name="LevelMin" value="Fatal" />
129         <param name="LevelMax" value="Fatal" />
130       </filter>
131     </appender>
132 
133     <logger name="RollingLogFileAppender">
134       <level value="ALL" />
135       <appender-ref ref="RollingFileDebug" />
136       <appender-ref ref="RollingFileInfo" />
137       <appender-ref ref="RollingFileWarn" />
138       <appender-ref ref="RollingFileError" />
139       <appender-ref ref="RollingFileFatal" />
140     </logger>
141 
142     <!--<root> 
143     控制級別,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF   
144     比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日誌將不會被記錄  
145      如果沒有定義LEVEL的值,則預設為DEBUG  
146       <level value="ALL" /> 
147        按日期切分日誌檔案,並將日期作為日誌檔案的名字  
148       <appender-ref ref="RollingFileAppenderNameByDate" />
149     </root>-->
150   </log4net>
151 </configuration>
View Code

4,執行專案,測試 除以0 和 直接寫;就會看到如下