用 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 else103  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 和 直接写;就会看到如下

   

相关文章