Web 应用配置Log4Net

1.第一步:在web.config文件添加如下代码:

[sourcecode language="csharp"]
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="TestLog.txt"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="yyyyMMdd"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="10MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%d{yyyy-MM-dd HH:mm:ss}] [%p] [%c:%L] - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
[/sourcecode]

第二步:添加Log4Net引用

log4net.dll

第三步:在global.asax 文件中添加命名空间

[sourcecode language="csharp"]
using log4net;
using log4net.Config;
using log4net.Repository;
using log4net.Repository.Hierarchy;
[/sourcecode]

在 Application_Start 方法下添加

[sourcecode language="csharp"]
protected void Application_Start(object sender, EventArgs e)
{
XmlConfigurator.Configure();
}
[/sourcecode]

第四步 :添加Logger 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Phone.BLL
{
    public class LogHelper
    {
        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
       
        public static void WriteLog(string info)
        {
            if(loginfo.IsInfoEnabled)
            {
                loginfo.Info(info);
            }
        }
        public static void WriteLog(Exception se)
        {
            if(logerror.IsErrorEnabled)
            {
                logerror.Error(se);
            }
        }

        public static void WriteLog(string info,Exception se)
        {
            if(logerror.IsErrorEnabled)
            {
                logerror.Error(info, se);
            }
        }
    }
}

第五不: 捕获异常

        catch (Exception ex)
            {
                LogHelper.WriteLog(ex);
                return Ok(new WebResult(2));
            }

 

log4net 常用参数:

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

FAQ:

1.控制日志文件大小的问题

对于一个长时间使用并且有大量业务日志的系统来说,如果使用FileAppender将日志一直记录到一个文件中会引起性能低下的问题,我曾见过有个系统的日志文件达到了800多M,最后系统无法及时响应了,在这种情况下可考虑使用RollingFileAppender循环记录日志,一种是指定文件的最大长度,如果超过了就重新生成一个文件,如下面的配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
  <file value="RollingFileAppender_log.txt" /> 
  <appendToFile value="true" /> 
  <rollingStyle value="Size" /> 
  <maxSizeRollBackups value="10" /> 
  <maximumFileSize value="100KB" /> 
  <staticLogFileName value="true" /> 
  <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline" /> 
  </layout> 
</appender> 
在上面的配置中,每个日志文件最大100KB,最大日志文件个数是10生成的日志文件名会是RollingFileAppender_log.txt.1, RollingFileAppender_log.txt.2 ... RollingFileAppender_log.txt.10,如果记录的日志超过10个,会从RollingFileAppender_log.txt.1开始覆盖。
还有一种方式就是按照日期记录日志,它的配置如下:
<appender name="RollingLogFileAppender_DateFormat" type="log4net.Appender.RollingFileAppender"> 
  <file value="RollingLogFileAppender_DateFormat_log.txt" /> 
  <appendToFile value="true" /> 
  <rollingStyle value="Date" /> 
  <!--<datePattern value="yyyyMMdd-HHmm" />--> 
  <datePattern value="yyyyMMdd" /> 
  <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread](%file:%line) %-5level %logger [%property{NDC}] - %message%newline" /> 
  </layout> 
</appender> 

 

后记:

如果想暂停Log4Net日志功能,在webconfig添加如下代码即可

[sourcecode language="csharp"]
<log4net></pre>
<log4net threshold="OFF" />
<appender>.....
[/sourcecode]
[/sourcecode]Let me know if you face any further issue on this.

 Log4Net  SDK

posted @ 2015-07-08 16:36  chaha  阅读(284)  评论(0编辑  收藏  举报