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

Mar*_*vec 4 logging log4j request

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

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

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

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

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

jul*_*ano 5

我认为你应该使用Log4j过滤器.

在log4j2.xml配置中有这个:

<DynamicThresholdFilter key="X-Log-Level" onMatch="ACCEPT" onMismatch="NEUTRAL" defaultThreshold="ERROR">
    <KeyValuePair key="TRACE" value="TRACE"/>
    <KeyValuePair key="DEBUG" value="DEBUG"/>
</DynamicThresholdFilter>
Run Code Online (Sandbox Code Playgroud)

(...)并在您的请求中设置一个过滤器,通过例如MDC将"X-Log-Level"分配给线程上下文.

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