2013-03-28 68 views
0

我有一个Web服务,并有一些其他Web服务作为依赖关系。其中一个依赖项是我每15秒发送一小段不重要的数据的服务。我每10分钟将重要的数据片段发送给其他依赖项。我希望看到来自每10分钟发生的呼叫的日志行,但不希望每15秒发生一次呼叫(这会使我的日志非常嘈杂)。基于调用堆栈有条件地禁用记录器

问题在于两个调用都使用相同的第三方类:httpclient。该日志行看起来是这样:

27 Mar 2013 18:14:54,001 [DEBUG] (main) httpclient.wire.content: blah blah blah 

我已经试过玩弄NDC,但无法弄清楚如何基于堆栈的顶部的诊断上下文配置我的记录器的阈值。

任何想法?

+0

所以 - 你想禁用您的应用程序/启用记录器,根据您调用Web服务? - 我弄错了吗? – Neel 2013-03-28 01:57:56

+0

不;我想要有时禁用记录器,并根据我从哪里调用记录器来启用它。所有这些都发生在我的应用程序中。 – 2013-03-28 04:00:53

回答

0

将httpclient.wire.content记录器级别设置为至少WARN,并在发送重要数据之前进行日志调用。

+0

这是迄今为止最好的实际答案,但为了审计目的,我需要httpclient的实际线路日志。 – 2013-03-28 04:02:11

+0

做两个appender。一个httpclient.wire.content是WARN,另一个是DEBUG。 – DiogoSantana 2013-03-28 04:04:17

+0

如何决定使用哪一个? – 2013-03-28 04:11:08

0

如果你想你与重要数据,来电后打开/关闭日志记录或更改日志级别,你可以做这样的事情

LogManager.getLogger(Class.forName("httpclient.wire.content"))‌​.setLevel(Level.OFF); 

更改为类级别应该更改日志那个特定的类。

仅供参考 - LogManager.getCurrentLoggers();应该返回所有记录仪

+0

这不起作用,因为我的程序是多线程的; 15秒的请求可能与10分钟的请求同时发生。我想从一个而不是另一个登录消息。 – 2013-03-28 04:01:32

+0

@CoryKendall如何使用锁来避免多线程问题? – 2013-03-28 10:43:55

+0

@JintianDENG这是一个有趣的想法,但我不能证明使用锁来控制像日志一样简单和低级别的事情是合理的。在担心因锁定引起的并发症之前,我会放弃。 – 2013-03-28 19:47:42