log4j(或其他Java记录器)Appender可以接受或访问请求上下文对象吗?

时间:2010-10-30 17:40:25

标签: logging log4j restlet slf4j appender

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

我可能只是使用自定义appender来解决这个问题,该appender知道如何专门为日志记录处理Context。