Log4Net 使用技巧

1. 利用nuget对log4net的引用 

2. 在项目中添加log4Net.Config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="ConsoleAppender" />
    </root>
    <appender name="ConsoleAppender"  type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] %level [%thread][%c{1}:%line] - %m%n" />
      </layout>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="logss/aa.txt" />
      <!--<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="StaticLogFileName" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level %thread %logger - %message %newline" />   -
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>
  </log4net>
</configuration>
StaticLogFileName 为true时File参数就要有固定的文件名,如果为false时 只需要写文件夹名称即可
<conversionPattern value="%date %level %thread %logger - %message %newline" />  在文件中输出的内容格式
<param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" /> 动态生成文件的格式

当生成的日志过大时可以采用按小时生成并且创建日期文件夹
<param name="DatePattern" value="yyyy-MM-dd/yyyy-MM-dd-HH&quot;.log&quot;" />

3. 对于AssemblyInfo.cs文件添加 特性

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]  注意此处的log2net.config与刚才添加的文件名保持一致

4. 添加记日志的Helper类

    public class Log4NetHelper
    {
        private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender");

        public static void WriteLog(string message)
        {
            logger.Info(message);
        }
    }

 

日志可以分组:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    </configSections>
    <log4net>
        <root>
            <level value="ALL" />
        </root>
        <logger name="CalledLogger">
            <level value="ALL" />
            <appender-ref ref="CalledInfoAppender" />
            <appender-ref ref="CalledErrorAppender" />
        </logger>
        <logger name="CallingLogger">
            <level value="ALL" />
            <appender-ref ref="CallingInfoAppender" />
            <appender-ref ref="CallingErrorAppender" />
        </logger>
        <logger name="InfoLogger">
            <level value="ALL" />
            <appender-ref ref="InfoAppender" />
            <appender-ref ref="ErrorAppender" />
        </logger>
        <!-- 被调函数记录调用参数和调用返回结果 -->
        <appender name="CalledInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CalledInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 被调函数记录内部错误原因 -->
        <appender name="CalledErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CalledError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
        <!-- 调用接口记录调用参数和调用返回结果-->
        <appender name="CallingInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CallingInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 调用返回错误是记录错误信息 -->
        <appender name="CallingErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\CallingError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
        <!-- 程序内部调试日志 -->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\LogsInfo\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
            </filter>
        </appender>
        <!-- 程序内部调试错误日志 -->
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" >
            <param name="File" value="Logs\LogsError\" />
            <param name="AppendToFile" value="true" />
            <param name="RollingStyle" value="Date" />
            <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
            <param name="StaticLogFileName" value="false" />
            <layout type="log4net.Layout.PatternLayout,log4net">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
            </layout>
            <filter type="log4net.Filter.LevelRangeFilter">
                <param name="LevelMin" value="ERROR" />
                <param name="LevelMax" value="ERROR" />
            </filter>
        </appender>
    </log4net>
</configuration>

 

c# 调用程序

    public class Log4NetHelper
    {
        private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender");


        private static readonly ILog calledLogger = LogManager.GetLogger("CalledLogger");

        private static readonly ILog callingLogger = LogManager.GetLogger("CallingLogger");

        private static readonly ILog infoLogger = LogManager.GetLogger("InfoLogger");

        public static void WriteLog(string message)
        {
            //log4net.Config.XmlConfigurator.Configure();
            logger.Info(message);
        }
    }

 

posted @ 2018-10-24 15:24  小布雷  阅读(445)  评论(0)    收藏  举报