设置log4net appeners以根据上下文属性或上下文堆栈级别创建文件



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

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

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

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

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

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

是否有一种方法可以配置appender来为不同的上下文属性或上下文堆栈级别等创建不同的文件?

编辑:

我正在使用log4net通过城堡温莎日志设施,我正在考虑切换到NLog来解决这个问题。

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

:

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

如果可能的话,我仍然更喜欢使用log4net,因为我正在测试的项目使用它。也许我的NLog例子可以给一些人启发,让他们知道如何在log4net上做到这一点,也许他们可以帮助我弄清楚:)

您可能会对本文感兴趣:Log4Net:通过编程方式指定多个记录器(带有多个文件追加器)

另外,如果你只是担心可读性,可能有日志文件查看器,可以通过线程名称分离出日志条目。

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

最新更新