How do I configure log4net such that properties of an object can be mapped to the log output?
我试图通过提供一种将LogMessage对象作为单个参数的SOAP Web服务来提供一种记录在Flex客户端中发生的错误的方法。
1 2 3 4 5 6 7 | 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客户端将填充此对象。
1 2 3 4 5 | [WebMethod()] public void LogClientError(LogMessage message) { rollingLogger.Error(message); } |
当前这将打印LogMessage类的全限定名,因此我目前的假设是log4net只是在传入的对象上调用.ToString()。
但是,我真正想做的是将LogMessage类中的每个属性映射到一个模式,以便log4net可以正确写出所需的信息。我希望以仍然支持典型附加程序(DB,文件,SMTP)的方式执行此操作。
如何配置log4net,以便可以将对象的属性映射到日志输出?
log4net可以采用两个路径。第一种是为LogMessage实例创建自定义对象渲染器。您需要实现IObjectRenderer接口并注册实现。
另一种可能更可重用的方法是将patternlayout类子类化。然后,您的自定义模式布局可以支持用于命名属性的特殊语法,布局可以将其用于反映传入的消息对象。
如果LogMessage是部分消息,则可以在LogMessage上创建ToString()方法。