我想扩展 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 配置为使用我的自定义“MyAppender”和自定义渲染器“MyRenderer”。渲染器将返回一个简单的 SQL 插入语句,并由附加程序写入数据库。 也许有更好的方法来做到这一点。
最佳答案
您可以将自定义对象存储在 ThreadContext(或全局上下文,如果有意义的话)
log4net.ThreadContext.Properties["MyLogObject"] = entry;
该属性可以很容易地提取到您的 appender 中。如果您提供“ToString()”覆盖,您甚至可以使用普通附加程序打印它并指定转换模式:
date %-5level %property{MyLogObject} - %message%newline
为 log4net 创建接口(interface)和包装器是个好主意。然后添加接受对象作为参数的方法,以便隐藏有关设置上下文的详细信息。
关于c# - log4net 自定义日志对象和附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342544/