我使用log4net来记录对API的调用。很多电话。我调用的方法有多兆字节的数据用于请求/响应对,并且很难读取有多个调用写入同一文件的日志,无论我使用什么日志记录模式。所以,我觉得最好的方法是登录多个文件。
我很难弄清楚如何让log4net执行此操作,或者它是否支持它。
来自Log4Net常见问题解答 - Can the outputs of multiple client request go to different log files?
许多开发人员面临着区分源自同一类但不同客户端请求的日志输出的问题。他们提出了巧妙的机制来将日志输出扇出到不同的文件。在大多数情况下,这不是正确的方法。
使用上下文属性或堆栈(ThreadContext)更简单...此后,日志输出将自动包含上下文数据,以便您可以区分不同客户端请求的日志,即使它们输出到同一文件。 / p>
我查看了有关上下文和上下文属性的文档。似乎事件上下文最适合,但我也尝试阅读其他上下文的文档。它们似乎只允许我添加最终存储在我的日志文件中的其他属性,而不是作为日志文件名的组件,或允许我自动附加到不同的文件。
有没有办法配置appender为不同的上下文属性或上下文堆栈级别等创建不同的文件?
修改
我正在通过Castle Windsor Logging工具使用log4net,我正在考虑切换到NLog来解决这个问题。
NLog似乎通过在{logger}
目标的File
属性中使用fileName
布局渲染器来支持此行为。我可以通过使用Windsor的ILogger.CreateChildLogger
方法生成子记录器并设置{logger.shortName=True}
来有效地设置此属性。
请参阅:
http://nlog-project.org/forum#nabble-td1685989
如果可能的话,我仍然更喜欢使用log4net,因为我正在测试的项目使用它。也许我的NLog示例可以让人们了解如何在log4net上完成这项工作,也许他们可以帮助我弄明白:)
答案 0 :(得分:1)
您可能会对此文章感兴趣:Log4Net: Programmatically specify multiple loggers (with multiple file appenders)
此外,如果您只担心可读性,可能会有日志文件查看器,可以按线程名称分隔日志条目。
另一种可能性是记录数据库中的条目,包括您的线程名称,这些条目可以使用sql轻松过滤。