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

标签 c# .net logging 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 配置为使用我的自定义“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/

相关文章:

c# - Roslyn:获取数组值

c# - 在 C# 中处理序列化异常

c# - 如何让 AutoMapper 创建一个类的实例

python - sys.excepthook 在导入的模块中不起作用

c - 我们如何在构建代码时保存日志?

c# - 从文件夹访问 Windows 窗体

c# - 具有支持文件检测的 API 的云存储

c# - 如何在 Microsoft Edge SeleniumTools 中隐藏命令提示符

datetime - Enterprise Library 5.0 - 应用程序日志记录 - 日期时间不正确

c# - 使用 Autofac 解析 IRepository<T> 的多个具体类?