Web 应用配置Log4Net

时间:2021-07-29 06:54:55

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());
}

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