博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

用log4net快速构建asp.net 异常日志

Posted on 2008-07-27 13:42  codingsilence  阅读(974)  评论(0编辑  收藏  举报

 

log4net是一个非常完善的日志组件. 有着强大的可配置性. 有助于提高开发效率 。log4net是apache组织开发的日志组件, 同其姐妹log4j一样,
是一个开源项目. 可以以插件的形式应用在你的系统中. 下面仅说明如何应用在web forms项目中. 做为主要的日志输出组件.

第一步:应该下载log4net.dll并引入到你的项目中,下载见附件

第二步:修改你的global.asa.cs. 配置application对象启动的时候加载log4net配置
protected void Application_Start(Object sender, EventArgs e)
{
log4net.Config.DOMConfigurator.Configure();
}

第三步:在web.cofig根节点 configuration 中加入如下section
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>

第四步:在web.cofig增加配置节点
<log4net>
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File" value="E:\\Log\\" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="100" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p
&lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
此节点将在参数 <param name="File" 所指定的目录下生成以日期为文件名的日志文件,请自行根据实际情况修改。
如: 2005年2月3日,则在目录下生成 20050203.htm 的日志文件。

第五步:在程序中写入日志
以下例子是在Global.asax的 Application_Error 方法里捕捉所有异常写入当天日志。在其他页面的代码里页可以这么写入。

先实例化:private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
然后在Application_Error方法中写自定义消息:
protected void Application_Error(Object sender, EventArgs e)
{
log.Info("\r\n客户机IP:"+ Request.UserHostAddress +"\r\n<BR>错误地址:"+ Request.Url,
Server.GetLastError());
}


经过以上5个步骤就能够在很短的时间内完成站点的异常日志工作,经常查看日志可以发现我们程序中的不足而且可以发现一些恶意访问的记录,然后做出相应的措施。




补充一下,如果需要用log4net同时记录操作日志和异常日志,并且希望把他们存储在不同的地方(文件或者数据库),可以这样处理,这里以文件为例。

首先更改配置文件
增加logger配置节,
<logger name="logerror">

<level value="ERROR" />

<appender-ref ref="RollingLogFileAppender" />

</logger>

<logger name="loginfo">

<level value="INFO" />

<appender-ref ref="InfoAppender" />

</logger>根据需要可以定义多个,
设置各个log对应的级别,并补充每个appender所对应的节点
<appender name="RollingLogFileAppender"

type="log4net.Appender.RollingFileAppender">

<param name="File" value="F:\\AppLog\\" />

<param name="AppendToFile" value="true" />

<param name="MaxSizeRollBackups" value="100" />

<param name="StaticLogFileName" value="false" />

<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />

<param name="RollingStyle" value="Date" />

<layout type="log4net.Layout.PatternLayout">

<param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t]
&lt;BR&gt;%n异常级别:%-5p

&lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />

</layout>

</appender>



<appender name="InfoAppender"

type="log4net.Appender.RollingFileAppender">

<param name="File" value="F:\\App\\" />

<param name="AppendToFile" value="true" />

<param name="MaxSizeRollBackups" value="100" />

<param name="StaticLogFileName" value="false" />

<param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />

<param name="RollingStyle" value="Date" />

<layout type="log4net.Layout.PatternLayout">

<param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n日志时间:%d [%t]
&lt;BR&gt;%n日志级别:%-5p

&lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />

</layout>

</appender>


在cs文件里定义多个log实例,
public static readonly log4net.ILog loginfo =
log4net.LogManager.GetLogger("loginfo");

public static readonly log4net.ILog logerror =
log4net.LogManager.GetLogger("logerror");

作为操作日志和异常日志的操作对象,
根据级别,进行操作
if(loginfo.IsInfoEnabled)
loginfo.Info("新增文章成功!");

if(logerror.IsErrorEnabled)
logerror.Error("新增文章出错!",se);



参考文档

http://www.ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html?page=1





配置的样例
http://logging.apache.org/log4net/r...g-examples.html

生成文件的格式有三种
1。按日期
2。按文件大小
3。同时按日期和文件大小

关键节点
<param name="MaxFileSize" value="10240" />

<param name="StaticLogFileName" value="false" />

<param name="DatePattern" value="yyyyMMddHH&quot;.htm&quot;" />

<param name="RollingStyle" value="Composite" />

文件大小的单位是字节,