关于c#:如何配置log4net,以便可以将对象的属性映射到日志输出?

 2021-04-26 

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()方法。