我想扩展log4net以接受自定义日志对象作为参数.例如:
public class MyLogObject
{
public string PropA;
public int PropB;
}
private MyLogObject entry = new MyLogObject() {PropA = "FooBar", PropB = 1};
Log.Debug(entry);
…这应该类似于例外.
在第二步中,应使用自定义数据库附加程序将自定义日志对象写入数据库.定制数据库追加器将类似于ADONetAppender,但进行了一些修改,例如内部缓冲的日志条目队列.
有谁知道它是否适用于log4net,是否有任何示例可以帮助我做到这一点?
我的日志对象和数据库字段的属性是固定的,因此无需对其进行配置.
更新资料
我的想法是将log4net配置为与自定义渲染器“ MyRenderer”一起使用我的自定义“ MyAppender”.渲染器将返回一个简单的SQL插入语句,并由附加器将其写入数据库.
也许有更好的方法可以做到这一点.
解决方法:
您可以将自定义对象存储在ThreadContext(或全局上下文,如果有意义的话)中
log4net.ThreadContext.Properties[“MyLogObject”] = entry;
该属性可以轻松地在您的附加程序中提取.如果提供“ ToString()”替代,则甚至可以使用普通的附加程序并指定转换模式来打印它:
date %-5level %property{MyLogObject} – %message%newline
为log4net创建接口和包装是一个好主意.然后,添加将对象作为参数接受的方法,以便隐藏有关设置上下文的详细信息.