zoukankan      html  css  js  c++  java
  • 用 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} 
    【异常类型】:{1} 
    【异常信息】:{2} 
    【堆栈调用】:{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 和 直接写;就会看到如下

       

  • 相关阅读:
    Android 2.2 r1 API 中文文档系列(11) —— RadioButton
    Android API 中文 (15) —— GridView
    Android 中文 API (16) —— AnalogClock
    Android2.2 API 中文文档系列(7) —— ImageButton
    Android2.2 API 中文文档系列(6) —— ImageView
    Android 2.2 r1 API 中文文档系列(12) —— Button
    Android2.2 API 中文文档系列(8) —— QuickContactBadge
    [Android1.5]TextView跑马灯效果
    [Android1.5]ActivityManager: [1] Killed am start n
    Android API 中文(14) —— ViewStub
  • 原文地址:https://www.cnblogs.com/recordman/p/10128163.html
Copyright © 2011-2022 走看看