如何配置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以使对象的属性可以映射到日志输出?

log4net有两条路径可供选择。 第一种是为LogMessage实例创建自定义对象渲染器。 您需要实现IObjectRenderer接口并注册实现 。

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

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