我在我的应用程序中使用 Apache POI 5.2.2。 Apache POI 使用 log4j2 作为其用于调试的内部日志记录机制。 因此 log4j-api-2.17.2.jar 是必需的依赖项。这里我应该注意,我没有使用 maven,所以我下载了 POI 二进制发行版,并将所需的依赖项包含在应用程序类路径中。
POI 中的日志记录适用于 POI 开发人员,不建议用于正常操作(即最终用户)。 对于我的用例,我根本不想使用日志记录。 但是,当我的应用程序第一次加载其中一个 POI 类时,stderr 上会打印以下消息:
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
我不想添加log4j-core,因为我真的不想要日志记录。我真的只是想抑制此消息,因为日志记录与应用程序无关。 我想以编程方式执行此操作,以避免为我不使用的内容添加配置文件。 我尝试通过将
log4j2.StatusLogger.level
属性设置为 OFF
来做到这一点,但这没有任何区别(我也尝试将其设置为 0
)。
是否有一个简单的咒语可以用来抑制 StatusLogger 消息? 或者我是否必须完全进入 log4j2 世界并编写一个空记录器?
您可以通过在
Log4j2 属性源之一中将记录器上下文工厂显式设置为
org.apache.logging.log4j.simple.SimpleLoggerContextFactory
来禁用该消息。
您可以添加:
log4j2.loggerContextFactory = org.apache.logging.log4j.simple.SimpleLoggerContextFactory
到类路径上的
log4j2.component.properties
文件。
编辑:从版本
2.24.0
开始,您应该使用log4j.provider
属性:
log4j.provider = org.apache.logging.log4j.simple.internal.SimpleProvider
添加到命令行标志:
-Dlog4j2.loggerContextFactory=org.apache.logging.log4j.simple.SimpleLoggerContextFactory
本厂默认设置为
SimpleLogger
。