我试图提供一种方法来记录我们的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,使对象的属性可以映射到日志输出?
答案 0 :(得分:3)
log4net有两条路径可供选择。第一种是为LogMessage实例创建自定义对象渲染器。您需要实施the IObjectRenderer interface和register the implementation。
另一种更可重用的路径是继承patternlayout类。然后,您的自定义模式布局可以支持命名属性的特殊语法,布局可以使用这些语法来反映传入的消息对象。
答案 1 :(得分:0)
如果LogMessage是部分的,你可以在LogMessage上创建一个ToString()方法。