我是Logging和Log4j的新手。 我想要做的是更改每个请求的记录器级别。这意味着:
通常,优先级设置为ERROR,但用户可以使用特殊参数调用服务器,以将优先级日志级别设置为DEBUG,但仅限于该用户/请求。
这意味着如果用户A发送请求http://myServer.com/test,它只记录那些优先级为ERROR的消息。
但是如果用户A发送请求http://myServer.com/test?debug=true,则记录器会记录所有消息,但是如果用户B同时发送请求http://myServer.com/test,则仅记录ERROR消息。
如果这些日志可以保存在新的appender中,那就太好了。
答案 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);