项目场景:
SpringBoot使用2.1.0版本的ESAPI日志输出。在使用ESAPI.Logger=x.x.x.JavaLogFactory无法打印debug级别日志,被迫将debug级别日志都是用info级别输出。再结合logback日志组件输出是。控制台无法正确的设置日志级别。
问题描述
在2.1.0版本的ESAPI中,使用JavaLogFactory无法通过调用.debug()输出日志,再结合logback只能使用info级别输出。
ESAPI.getLogger(loggers.getName()).debug("");//编译不报错,不能打印日志
ESAPI.getLogger(loggers.getName()).info("");//可以打印日志。
原因分析:
首先查看2.1.0版本的ESAPI的JavaLogFactory打印日志的相关类,默认日志级别info,并且尝试设置级别失败setLevel()。查看JavaLogger,发现并未设置debug的级别,用的是Level.FINE=500,但是在2.2.3.0版本中,有明确设定了200级别。
2.1.0版本
public void debug(EventType type, String message) {
this.log(Level.FINE, type, message, (Throwable)null);
}
2.2.3.0版本
public void debug(EventType type, String message, Throwable throwable) {
this.log(200, type, message, throwable);
}
解决方案:
升级到2.2.3.0,还需更改ESAPI.properties配置文件中ESAPI.Logger属性,
ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory //2.1.0
修改为:
ESAPI.Logger=org.owasp.esapi.logging.java.JavaLogFactory //2.2.3.0
2.2.3.0版本在支持log4j基础上还支持slf4j。但是项目中使用的是结合 logback
,依赖中还需排除log4j。
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
由于项目中自己使用静态方法封装了
org.owasp.esapi.Logger logger = ESAPI.getLogger(loggers.getName());
并且使用ESAPI.Logger=org.owasp.esapi.logging.java.JavaLogFactory,会报错。(此处查看是版本不同导致的。)
NoClassDefFoundError: Could not initialize class org.owasp.esapi.logging.java.JavaLogFactory
所以换个工厂。使用
ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory
就可以。
版权声明:本文为weixin_44288553原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。