日期:2014-05-18  浏览次数:20798 次

关于Log4Net日志组件的一个问题,请大家帮忙.....
我把用户操作的日志存入数据库,想把log4net事例中数据库扩展一下,多加一个字段(比如用户ID),该字段的数据如何添加? 
据说要实现PatternLayoutConverter接口,谁有代码能贴一下么,我搞了几天还没搞定,请牛人不吝赐教....
(其中配置文档已经正确配置了,如果单单用log4net的事例是能正确记录日志的)

------解决方案--------------------
这个好像只要再增加一个
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
就可以了吧,猜想。

还要在表里面增加一个字段,commandText value的值也相应的修改一下应该就可以了。
------解决方案--------------------
Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。 

Logger提供了多种方式来记录一个日志消息,你可以在你的应用程序里创建多个Logger,每个实例化的Logger对象都被log4net框架作为命名实体(named entity)来维护。这意味着为了重用Logger对象,你不必将它在不同的类或对象间传递,只需要用它的名字为参数调用就可以了。log4net框架使用继承体系,继承体系类似于.NET中的名字空间。也就是说,如果有两个logger,分别被定义为a.b.c和a.b,那么我们说a.b是a.b.c的祖先。每一个logger都继承了祖先的属性 

Log4net框架定义了一个ILog接口,所有的logger类都必须实现这个接口。如果你想实现一个自定义的logger,你必须首先实现这个接口。你可以参考在/extension目录下的几个例子。 

ILog接口的定义如下: 

public interface ILog 



void Debug(object message); 

void Info(object message); 

void Warn(object message); 

void Error(object message); 

void Fatal(object message); 

  

//以上的每一个方法都有一个重载的方法,用来支持异常处理。 

//每一个重载方法都如下所示,有一个异常类型的附加参数。 

void Debug(object message, Exception ex); 

// ... 

  

//Boolean 属性用来检查Logger的日志级别 

//(我们马上会在后面看到日志级别) 

bool isDebugEnabled; 

bool isInfoEnabled; 

//… 其他方法对应的Boolean属性 



Log4net框架定义了一个叫做LogManager的类,用来管理所有的logger对象。它有一个GetLogger()静态方法,用我们提供的名字参数来检索已经存在的Logger对象。如果框架里不存在该Logger对象,它也会为我们创建一个Logger对象。代码如下所示: 

log4net.ILog log = log4net.LogManager.GetLogger("logger-name"); 

通常来说,我们会以类(class)的类型(type)为参数来调用GetLogger(),以便跟踪我们正在进行日志记录的类。传递的类(class)的类型(type)可以用typeof(Classname)方法来获得,或者可以用如下的反射方法来获得: 

System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

尽管符号长了一些,但是后者可以用于一些场合,比如获取调用方法的类(class)的类型(type)。