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

    具体步骤如下:

    1. 从网上下载log4net对应.net版本的dll
    2. 在C#项目中引用该dll
    3. 创建log4net对应的配置文件
    4. 在程序中使用

    log4net的配置文件如下: 

    <?xml version="1.0" encoding="utf-8"?>
    <log4net>
      <appender name="Log4Name" type="log4net.Appender.RollingFileAppender">
        <!--日志路径-->
        <param name="File" value="F:Log2015StorageSystemLog4Namelog.log" />
        <!--是否是向文件中追加日志-->
        <param name="AppendToFile" value="true" />
        <!--log保留个数-->
        <param name="MaxSizeRollBackups" value="200" />
        <!--单个日志文件大小-->
        <param name="MaximumFileSize" value="5MB" />
        <!--日志文件名是否是固定不变的-->
        <param name="StaticLogFileName" value="false" />
        <!--日志文件名格式为:2008-08-31.log-->
        <DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
        <param name="RollingStyle" value="Size" />
        <layout type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
        </layout>
        <filter type="log4net.Filter.LoggerMatchFilter">
          <param name="LoggerToMatch" value="Log4Name" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
      <root>
        <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
        <level value="DEBUG" />
        <appender-ref ref="Log4Name" />
      </root>
    </log4net>

     创建LogHelper如下:

    public class LogHelper
    {
        private static ILog log=null;
        public static ILog Log
        {
            get
            {
                if (log == null)
                {
                    //log4.config表示log4的配置文件
                    string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "log4.config");
                    log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));//修改日志配置无需重启程序,自动加载
                    //Log4Name表示配置文件中的日志名称
                    log = LogManager.GetLogger("Log4Name");
                }
                return log;
            }
        }
    }

     使用方式如下:

    LogHelper.Log.Error("出错了哇");

     创建的日志如图:

    配置文件里面内容比较多,可以查阅相关文档进行详细配置! 


     另外,有时候我们需要把不同级别的文件放到不同的目录,首先配置文件如下:

    <?xml version="1.0" encoding="utf-8"?>
    <log4net>
      <appender name="AccesssService_Err" type="log4net.Appender.RollingFileAppender">
        <!--日志路径-->
        <param name="File" value="Errorslog.log" />
        <!--是否是向文件中追加日志-->
        <param name="AppendToFile" value="true" />
        <!--log保留个数-->
        <param name="MaxSizeRollBackups" value="200" />
        <!--单个日志文件大小-->
        <param name="MaximumFileSize" value="5MB" />
        <!--日志文件名是否是固定不变的-->
        <param name="StaticLogFileName" value="false" />
        <!--日志文件名格式为:2008-08-31.log-->
        <DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
        <param name="RollingStyle" value="Size" />
        <layout type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n消息描述:%property{Message}%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="WARN" />
          <levelMax value="FATAL" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
      <appender name="AccesssService_info" type="log4net.Appender.RollingFileAppender">
        <!--日志路径-->
        <param name="File" value="MyLogslog.log" />
        <!--是否是向文件中追加日志-->
        <param name="AppendToFile" value="true" />
        <!--log保留个数-->
        <param name="MaxSizeRollBackups" value="200" />
        <!--单个日志文件大小-->
        <param name="MaximumFileSize" value="5MB" />
        <!--日志文件名是否是固定不变的-->
        <param name="StaticLogFileName" value="false" />
        <!--日志文件名格式为:2008-08-31.log-->
        <DatePattern value="yyyy-MM-dd HH'时.log'"></DatePattern>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
        <param name="RollingStyle" value="Size" />
        <layout type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern" value="记录时间:%date%n线程ID:[%thread] %n日志级别:%-5level%n记录位置:%location%n消息描述:%property{Message}%n异常:%exception%n消息:%message%newline%n------------------------------------------%n" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="DEBUG" />
          <levelMax value="INFO" />
        </filter>
        <filter type="log4net.Filter.DenyAllFilter" />
      </appender>
      <logger name="gdLog4net" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="AccesssService_Err" />
        <appender-ref ref="AccesssService_info" />
      </logger>
    </log4net>
    View Code

     LogHelper代码如下:

    public class LogHelper
    {
        private static ILog log = null;
        public static ILog Log
        {
            get
            {
                if (log == null)
                {
                    //log4.config表示log4的配置文件
                    string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config", "log4.config");
                    log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));
                    log = LogManager.GetLogger("gdLog4net");
                }
                return log;
            }
        }
    }

    1.主要是log实例化有变化。通过GetLogger方法获取xml配种中gdLog4net的Logger

    2.xml中定义了logger,关于logger和root,可以参考文章:https://www.cnblogs.com/zhangchenliang/p/4546352.html 的后面部分内容,大概意思就是说root其实就是一个顶级的logger,所有其他logger都默认继承这个root。如果需要让logger阻断和root的联系,可以将logger的additivity设置为false。

  • 相关阅读:
    属性的自动完成
    二十七、详测 Generics Collections TDictionary(3): TPairEnumerator、TKeyEnumerator、TValueEnumerator、ExtractPair
    Delphi 反转内存的函数
    类方法调用
    九、泛型排序器 TComparer
    十九、详测 Generics Collections TList (10): OnNotify 事件
    二十、详测 Generics Collections TList (11): Create
    二十一、详测 Generics Collections TQueue (1): Enqueue、Dequeue、Peek
    十四、详测 Generics Collections TList (5): Move、Exchange
    二十二、详测 Generics Collections TQueue (2): Create、Count、Clear、TrimExcess
  • 原文地址:https://www.cnblogs.com/duanjt/p/5850250.html
Copyright © 2011-2022 走看看