每个请求更改log4j中的优先级

时间:2014-06-11 08:36:46

标签: logging request log4j

我是Logging和Log4j的新手。 我想要做的是更改每个请求的记录器级别。这意味着:

通常,优先级设置为ERROR,但用户可以使用特殊参数调用服务器,以将优先级日志级别设置为DEBUG,但仅限于该用户/请求。

这意味着如果用户A发送请求http://myServer.com/test,它只记录那些优先级为ERROR的消息。

但是如果用户A发送请求http://myServer.com/test?debug=true,则记录器会记录所有消息,但是如果用户B同时发送请求http://myServer.com/test,则仅记录ERROR消息。

如果这些日志可以保存在新的appender中,那就太好了。

1 个答案:

答案 0 :(得分:5)

我认为你应该使用Log4j Filters

在log4j2.xml配置中使用此功能:

<DynamicThresholdFilter key="X-Log-Level" onMatch="ACCEPT" onMismatch="NEUTRAL" defaultThreshold="ERROR">
    <KeyValuePair key="TRACE" value="TRACE"/>
    <KeyValuePair key="DEBUG" value="DEBUG"/>
</DynamicThresholdFilter>

(...)并在您的请求中设置一个过滤器,用于分配&#34; X-Log-Level&#34;例如,Thread Context来自MDC

// Replace the hardcoded logLevel value with something dynamic,
// ideally from the http request header.
String logLevel = "DEBUG";
MDC.put("X-Log-Level", logLevel);