为Spring Security 4.x设置logging level == debug
的正确方法是什么?我正在使用slf4j/log4j
。
这是我尝试过的,log4j.properties:
...
log4j.logger.org.springframework.security=DEBUG
还试过:
log4j.category.org.springframework.security=DEBUG
以下内容在AbstractAuthenticationProcessingFilter.successfulAuthentication
中返回false:
if (logger.isDebugEnabled()) {
logger.debug("Authentication success. Updating SecurityContextHolder to contain: "
+ authResult);
}
但是在SecurityContextPersistenceFilter
中,debug的测试返回true,我可以看到调试输出:
if (debug) {
logger.debug("SecurityContextHolder now cleared, as request processing completed");
}
控制台中填充了以下语句,表明日志级别确实是debug
:
2016-01-20 12:10:34,849 DEBUG org.springframework.security.web.savedrequest.DefaultSavedRequest.propertyEquals(321): - pathInfo: both null (property equals)
2016-01-20 12:10:34,849 DEBUG org.springframework.security.web.savedrequest.DefaultSavedRequest.propertyEquals(321): - queryString: both null (property equals)
答案 0 :(得分:0)
我假设您使用自定义AbstractAuthenticationProcessingFilter
,可能是自定义的UsernamePasswordAuthenticationFilter
?如果这是真的,那么我想我可以解释一下这种行为。
logger
(以及AbstractAuthenticationProcessingFilter
的每个子类)中使用的记录器GenericFilterBean
由{{1}的受保护的最终logger
字段提供}}。它由以下代码初始化:
GenericFilterBean
如您所见,记录器名称是"已定义"按/** Logger available to subclasses */
protected final Log logger = LogFactory.getLog(getClass());
。因此,Object.getClass()
中的每个logger.debug(...)
语句都由具体子类的记录器发布!
因此,当您有一个自定义的AuthenticationProcessingFilter(可能在AbstractAuthenticationProcessingFilter
包中没有抵制)时,您需要配置日志框架以打印此类/包的调试语句!