关于ESAPI无法打印debug级别日志

项目场景:

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版权协议,转载请附上原文出处链接和本声明。