0

我目前正在使用 Restlet 编写 Web 服务,并在 log4j 前面使用 slf4j 进行日志记录。目前我有标准的 log4j Appenders 用于记录到文件。我试图做的还包括使用自定义 Appender 在 HTTP 响应中的日志输出。

我看到的问题是 Appender 默认无法访问正在发出的请求的上下文,这是有道理的,因为理论上请求可以在异步 Appender 开始执行之前完成。我仍然很好奇这是否可能,也许是通过使 Appender 同步并通过日志调用传递一个 Response 对象。我找不到 log4j 支持这个的方法,另一个框架会像 logback 吗?由于性能影响,我最终不一定会使用这种方法,但我仍然很好奇。

仅供参考,我当前的解决方法是自定义日志方法,它将条目添加到响应中,然后调用 slf4j 方法进行标准日志记录。这样做的缺点是必须使用自定义方法,并且我只获取我控制的代码的日志条目(我正在使用的仅使用 Appenders 的库不会被记录到响应中)

4

1 回答 1

0

大多数 Appender 操作不会异步发生。我不确定 slf4j 如何改变这个等式,但你当然可以构建一个 Appender,它知道如何将任何给定对象格式化为 LogEvent。异步性并不重要,因为请求上下文一旦到达 Appender 就应该保持不变——持有一个引用就足够了。

如何在 Log4J 代码之外访问请求的上下文?

我可能会使用一个自定义附加程序来解决这个问题,该附加程序知道如何为您的日志记录目的专门处理上下文。

于 2010-11-03T01:12:21.340 回答