0

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

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

来自 Log4Net FAQ -多个客户端请求的输出可以转到不同的日志文件吗?

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

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

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

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

编辑:

我正在通过 Castle Windsor Logging 设施使用 log4net,我正在考虑切换到 NLog 来解决这个问题。

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

看:

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

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

4

1 回答 1

1

This article may be of interest to you: Log4Net: Programmatically specify multiple loggers (with multiple file appenders)

Also if you are only worried about readability there may be log file viewers that can seperate out log entries by thread name.

Another possibility you have is to log the entries in a database including your thread name and these entries are easily filtered using sql.

于 2011-04-28T01:53:27.877 回答