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

时间:2009-06-25 01:23:11

标签: c# logging log4net

我试图提供一种方法来记录我们的Flex客户端中发生的错误,方法是提供一个SOAP Web服务,该服务将LogMessage对象作为单个参数。

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

如果客户端错误表面和调用的LogClientError方法通过log4net记录错误,则Flex客户端将填充此对象。

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

目前这会输出LogMessage类的完全限定名,因此我目前的假设是log4net只是在传入的对象上调用.ToString()。

但是,我真正希望能够做的是将LogMessage类中的每个属性映射到一个模式,以便log4net正确地写出所需的信息。我想这样做的方式是仍然支持典型的appender(DB,File,SMTP)。

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

2 个答案:

答案 0 :(得分:3)

log4net有两条路径可供选择。第一种是为LogMessage实例创建自定义对象渲染器。您需要实施the IObjectRenderer interfaceregister the implementation

另一种更可重用的路径是继承patternlayout类。然后,您的自定义模式布局可以支持命名属性的特殊语法,布局可以使用这些语法来反映传入的消息对象。

答案 1 :(得分:0)

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