【问题标题】:Setup log4net appenders to create a file per context property or context stack level?设置 log4net 附加程序以创建每个上下文属性或上下文堆栈级别的文件?
【发布时间】:2011-04-28 01:25:57
【问题描述】:

我正在使用 log4net 记录对 API 的调用。很多电话。我正在调用的方法具有数兆字节的请求/响应对数据,并且无论我使用什么日志记录模式,都很难读取将多个调用写入同一文件的日志。所以,我觉得最好的方法是登录到多个文件。

我很难弄清楚如何让 log4net 做到这一点,或者它是否支持它。

来自 Log4Net 常见问题解答 - Can the outputs of multiple client request go to different log files?

许多开发人员都面临着区分来自同一类但不同客户端请求的日志输出的问题。他们提出了巧妙的机制来将日志输出扇出到不同的文件。在大多数情况下,这不是正确的方法。

使用上下文属性或堆栈(ThreadContext)更简单......此后,日志输出将自动包含上下文数据,以便您可以区分来自不同客户端请求的日志,即使它们输出到同一个文件。

我查看了有关上下文和上下文属性的文档。似乎事件上下文最适合,但我也尝试阅读其他上下文的文档。似乎它们只是允许我在日志文件中添加额外的属性,而不是作为日志文件名的组成部分,或者允许我自动附加到不同的文件。

有没有办法配置 appender 为不同的上下文属性或上下文堆栈级别等创建不同的文件?

编辑:

我正在通过 Castle Windsor Logging 工具使用 log4net,我正在考虑改用 NLog 来解决这个问题。

NLog 似乎通过在File 目标的fileName 属性中使用{logger} 布局渲染器来支持这种行为。我可以通过使用 Windsor 的 ILogger.CreateChildLogger 方法创建一个子记录器并设置 {logger.shortName=True} 来有效地设置此属性。

见:

http://nlog-project.org/forum#nabble-td1685989

如果可能的话,我仍然更喜欢使用 log4net,因为我正在测试的项目使用它。也许我的 NLog 示例可以为某人提供有关如何在 log4net 上完成此操作的灵感,也许他们可以帮助我弄清楚:)

【问题讨论】:

    标签: log4net appender


    【解决方案1】:

    你可能会对这篇文章感兴趣:Log4Net: Programmatically specify multiple loggers (with multiple file appenders)

    此外,如果您只担心可读性,则可能有日志文件查看器可以按线程名称分隔日志条目。

    您的另一种可能性是在数据库中记录条目,包括您的线程名称,并且这些条目很容易使用 sql 过滤。

    【讨论】:

    • 我认为以编程方式指定记录器会带走 log4net 设计的一些有用性。我希望它可以独立于我的代码进行配置,唯一的代码更改是检测日志记录以使每个请求具有不同的上下文/属性。我开始认为您的其余答案(稍后使用日志查看器工具过滤)是这种情况下 log4net 的唯一选择。为那部分 +1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2019-04-24
    • 2020-09-25
    相关资源
    最近更新 更多