zoukankan      html  css  js  c++  java
  • C#中使用Log4记录日志

    Log4Net配置还是挺简单的,具体:

    1、新建Web或者Webform项目,使用Nuget下载log4net

    2、新建Config文件夹,将log4net配置文件放入此文件夹中(当修改web.config的时候会重启网站,所以把log4net单独出来比较好,也好管理),log4net配置:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
      <appender name="fatalAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="FATAL" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <param name="File" value="Logs\"/>
        <param name="AppendToFile" value="true"/>
        <param name="MaxSizeRollBackups" value="-1"/>
        <!--超过1024KB则自动新增文件-->
        <param name="MaximumFileSize" value="1024KB"/>
        <param name="RollingStyle" value="Composite"/>
        <param name="StaticLogFileName" value="false"/>
        <!--&quot;不能少-->
        <param name="DatePattern" value="&quot;fatal_&quot;yyyyMMdd&quot;.txt&quot;"/>
        <param name="Encoding" value="utf-8"/>
        <!--为空默认情况下会独占日志文件,不能被File.Open,通过"log4net.Appender.FileAppender+MinimalLock"使用最小锁定模型以允许多个进程可以写入同一个文件-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <appender name="errorAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="ERROR" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <param name="File" value="Logs\"/>
        <param name="AppendToFile" value="true"/>
        <param name="MaxSizeRollBackups" value="-1"/>
        <!--超过1024KB则自动新增文件-->
        <param name="MaximumFileSize" value="1024KB"/>
        <param name="RollingStyle" value="Composite"/>
        <param name="StaticLogFileName" value="false"/>
        <!--&quot;不能少-->
        <param name="DatePattern" value="&quot;error_&quot;yyyyMMdd&quot;.txt&quot;"/>
        <param name="Encoding" value="utf-8"/>
        <!--为空默认情况下会独占日志文件,不能被File.Open,通过"log4net.Appender.FileAppender+MinimalLock"使用最小锁定模型以允许多个进程可以写入同一个文件-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <appender name="warnAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="WARN" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <param name="File" value="Logs\"/>
        <param name="AppendToFile" value="true"/>
        <param name="MaxSizeRollBackups" value="-1"/>
        <!--超过1024KB则自动新增文件-->
        <param name="MaximumFileSize" value="1024KB"/>
        <param name="RollingStyle" value="Composite"/>
        <param name="StaticLogFileName" value="false"/>
        <!--&quot;不能少-->
        <param name="DatePattern" value="&quot;warn_&quot;yyyyMMdd&quot;.txt&quot;"/>
        <param name="Encoding" value="utf-8"/>
        <!--为空默认情况下会独占日志文件,不能被File.Open,通过"log4net.Appender.FileAppender+MinimalLock"使用最小锁定模型以允许多个进程可以写入同一个文件-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <appender name="infoAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelMatchFilter">
          <levelToMatch value="INFO" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <param name="File" value="Logs\"/>
        <param name="AppendToFile" value="true"/>
        <param name="MaxSizeRollBackups" value="-1"/>
        <!--超过1024KB则自动新增文件-->
        <param name="MaximumFileSize" value="1024KB"/>
        <param name="RollingStyle" value="Composite"/>
        <param name="StaticLogFileName" value="false"/>
        <!--&quot;不能少-->
        <param name="DatePattern" value="&quot;info_&quot;yyyyMMdd&quot;.txt&quot;"/>
        <param name="Encoding" value="utf-8"/>
        <!--为空默认情况下会独占日志文件,不能被File.Open,通过"log4net.Appender.FileAppender+MinimalLock"使用最小锁定模型以允许多个进程可以写入同一个文件-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <appender name="debugAppender" type="log4net.Appender.RollingFileAppender">
        <filter type="log4net.Filter.LevelMatchFilter">
          <!--只有级别是DEBUG的日志才能输出-->
          <levelToMatch value="DEBUG" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
        <param name="File" value="Logs\"/>
        <param name="AppendToFile" value="true"/>
        <param name="MaxSizeRollBackups" value="-1"/>
        <!--超过1024KB则自动新增文件-->
        <param name="MaximumFileSize" value="1024KB"/>
        <param name="RollingStyle" value="Composite"/>
        <param name="StaticLogFileName" value="false"/>
        <!--&quot;不能少-->
        <param name="DatePattern" value="&quot;debug_&quot;yyyyMMdd&quot;.txt&quot;"/>
        <param name="Encoding" value="utf-8"/>
        <!--为空默认情况下会独占日志文件,不能被File.Open,通过"log4net.Appender.FileAppender+MinimalLock"使用最小锁定模型以允许多个进程可以写入同一个文件-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="fatalAppender" />
        <appender-ref ref="errorAppender" />
        <appender-ref ref="warnAppender" />
        <appender-ref ref="infoAppender" />
        <appender-ref ref="debugAppender" />
      </root>
    </log4net>

     3、右键点击第2步骤的log4net文件属性,改成如图所示

    在app.config或者web.config中的configuration节点下加入:

    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
      </configSections>

    4、在Properties下的AssemblyInfo.cs文件中加入

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]

    我写了一个log4帮助类方便使用,代码:

     1     public static class Log4Helper
     2     {
     3         public static void Fatal(Type type, object message, Exception exception = null)
     4         {
     5             ILog log = LogManager.GetLogger(type);
     6             if (exception == null)
     7                 log.Fatal(message);
     8             else
     9                 log.Fatal(message, exception);
    10         }
    11 
    12         public static void Error(Type type, object message, Exception exception = null)
    13         {
    14             ILog log = LogManager.GetLogger(type);
    15             if (exception == null)
    16                 log.Error(message);
    17             else
    18                 log.Error(message, exception);
    19         }
    20 
    21         public static void Warn(Type type, object message, Exception exception = null)
    22         {
    23             ILog log = LogManager.GetLogger(type);
    24             if (exception == null)
    25                 log.Warn(message);
    26             else
    27                 log.Warn(message, exception);
    28         }
    29 
    30         public static void Info(Type type, object message, Exception exception = null)
    31         {
    32             ILog log = LogManager.GetLogger(type);
    33             if (exception == null)
    34                 log.Info(message);
    35             else
    36                 log.Info(message, exception);
    37         }
    38 
    39         public static void Debug(Type type, object message, Exception exception = null)
    40         {
    41             ILog log = LogManager.GetLogger(type);
    42             if (exception == null)
    43                 log.Debug(message);
    44             else
    45                 log.Debug(message, exception);
    46         }
    47     }

    5、调用:

    1             Log4Helper.Fatal(this.GetType(), "Fatal");
    2             Log4Helper.Error(this.GetType(), "Error", new Exception("error"));
    3             Log4Helper.Warn(this.GetType(), "Warn");
    4             Log4Helper.Info(this.GetType(), "Info");
    5             Log4Helper.Debug(this.GetType(), "Debug");

    在根目录会有一个Log文件夹,文件夹内容:

    最后说下Log4Net跨项目使用:

    如果我们将log4net帮助类放在另一个公共的类库项目中,又需要在另一个引用的项目中使用log4helper类,

    这时候仅需要在该项目里的Properties下的AssemblyInfo.cs文件中加入这句:

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]

  • 相关阅读:
    使用 yo 命令行向导给 SAP UI5 应用添加一个新的视图
    SAP Fiori Elements 应用的 manifest.json 文件运行时如何被解析的
    SAP UI5 标准应用的多语言支持
    微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
    SAP Fiori Elements 应用里的 Title 显示的内容是从哪里来的
    本地开发好的 SAP Fiori Elements 应用,如何部署到 ABAP 服务器上?
    如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
    教你一招:让集群慢节点无处可藏
    应用架构步入“无服务器”时代 Serverless技术迎来新发展
    MySQL数据库事务隔离性的实现
  • 原文地址:https://www.cnblogs.com/zuqing/p/5874384.html
Copyright © 2011-2022 走看看