【发布时间】:2021-12-28 02:44:50
【问题描述】:
我目前有一个程序使用 SLF4J/LoggerFactory 来捕获日志,配置是通过 logback.xml 完成的。我的日志按预期工作。最近,安全团队在我的工作中指示我更新一个使用 ESAPI 的类。我更新了课程并将ESAPI.properties 和validation.properties 添加到src/main/resources/esapi。在ESAPI.properties 中,我将 ESAPI.Logger 更新为ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory。根据我在线和通过 SO 的研究,我认为我可以正常使用我的日志(初始化为 protected final static Logger log = LoggerFactory.getLogger(this.class); 并用作 log.info("Example"))(将日志输出到服务器上的文件),但日志只在java程序运行时输出到CL。
【问题讨论】:
-
我将从这里开始:github.com/ESAPI/esapi-java-legacy/wiki/Using-ESAPI-with-SLF4J 这里有一些重要的日志配置消息:github.com/ESAPI/esapi-java-legacy/blob/develop/documentation/… 这可能会有所帮助。我们默认由程序员进行日志配置:ESAPI 只需要知道要使用什么框架并假设您已经相应地配置了它。我怀疑在 ESAPI 实例化记录器和您已经在应用程序中加载它之间存在 RACE。 ESAPI 必须是第一位的。
-
感谢您的反馈!如果我的
logback.xml文件中有我需要的所有配置,我是否需要在ESAPI.properties中声明除ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory之外的任何内容。我收到的命令行日志表明,在我的程序运行之前,ESAPI.properties和validation.properties已成功加载。那会排除种族问题吗?如果没有,我将如何解决?谢谢! -
Jeremiah 实际上回答了您的问题:您需要将编码引用更改为 ESAPI 而不是 slf4j。我的猜测是消除了 RACE 条件,因为如果所有日志调用都是 ESAPI,那么 slf4j 无法实例化,除非通过 ESAPI。没有更好的解决方案:不幸的是,ESAPI 被编码为单例,因此如果您想找到一种同时运行两者的方法,您将只能靠自己。
标签: java logging logback slf4j esapi