C#-log4net自定义日志对象和附加程序

我想扩展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创建接口和包装是一个好主意.然后,添加将对象作为参数接受的方法,以便隐藏有关设置上下文的详细信息.

上一篇:c#-Internet Explorer提示我是否要在运行log4net方法时运行csc.exe


下一篇:转换为单击一次应用程序或exe后为什么不进行日志记录?