2009-06-25 29 views
4

我试图提供一种方法来记录我们的Flex客户端中发生的错误,方法是提供一个SOAP Web服务,它将LogMessage对象作为单个参数。如何配置log4net,使对象的属性可以映射到日志输出?

public class LogMessage 
{ 
    public string Message { get; set; } 
    public string Exception { get; set; } 
    public string Version { get; set; } 
    public string User { get; set; } 
} 

该目的通过Flex客户端应的客户机端的错误表面和LogClientError方法被调用,其经由log4net的记录错误填充。

[WebMethod()] 
public void LogClientError(LogMessage message) 
{ 
    rollingLogger.Error(message); 
} 

目前这款打印LogMessage类的全名,所以我目前的假设是,log4net的仅仅是传入的对象调用的ToString()。

不过,我真正想要的要做的就是将LogMessage类中的每个属性映射到一个模式,以便log4net将正确写出所需的信息。我想这样做,典型的appender(数据库,文件,SMTP)仍然支持。

如何配置log4net,使对象的属性可以映射到日志输出?

回答

3

log4net有两条路径可以使用。首先是为LogMessage实例创建一个自定义对象渲染器。您需要实施the IObjectRenderer interfaceregister the implementation

另一条可重用的路由是对patternlayout类进行子类化。然后,您的自定义模式布局可以支持命名属性的特殊语法,布局可以使用该语法来反映传入的消息对象。

0

如果LogMessage是部分的,您可以在LogMessage上创建一个ToString()方法。

相关问题