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

       

  • 相关阅读:
    通过IDEA解决spring配置文件
    idea中xml打开方式变成file,改回来
    idea 搜索不到前端的ajax controller接口的原因
    IDEA 出现 updating indices 卡进度条问题的解决方案并加快索引速度
    java 循环中使用list时,出现list中全部加入了对象导致没有实现分组的解决方案
    java 从字符串中 以单个或多个空格进行分隔 提取字符串
    idea ssm项目出现日志中文乱码,封装的json中的msg字段中文乱码(但是json封装的bean中的字段不乱码)等其他各种项目下的中文乱码解决方案
    javaweb 解决jsp中${}传递中文值到后端以及get请求中文乱码的问题
    idea 开发javaee 时,出现访问的文件和源文件不一样,没有正常更新的解决方案
    java 迭代器只遍历了一次的解决方案
  • 原文地址:https://www.cnblogs.com/recordman/p/10128163.html
Copyright © 2011-2022 走看看