log4j2 未找到 1 个记录器的附加程序
Posted
技术标签:
【中文标题】log4j2 未找到 1 个记录器的附加程序【英文标题】:log4j2 No appenders found for 1 logger 【发布时间】:2017-05-09 23:55:35 【问题描述】:我在配置我的 log4j2.xml 文件以包含休眠日志时遇到问题。
这是我的 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Properties>
<Property name="logDir" value="$env:MY_APP/logs"/>
</Properties>
<Appenders>
<RollingFile name="MY_APP" fileName="$logDir/my_app.log" bufferedIO="true" filePattern="$logDir/my_app-%dyyyy-MM-dd-%i.log.gz">
<PatternLayout pattern="[%t] %d %-5p %x %m%n"/>
<Policies>
<OnStartupTriggeringPolicy/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="$logDir" maxDepth="1">
<IfFileName glob="my_app-*.log.gz" />
<IfLastModified age="31d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="MY_APP" level="debug"/>
</Root>
<Logger name="com.company" level="info"/>
<Logger name="com.companyName" level="info"/>
<Logger name="com.companyName.myApp" level="debug"/>
<Logger name="org.hibernate" level="info"/>
</Loggers>
在我的 jar 启动时,我会在控制台上打印以下内容:
log4j:WARN No appenders could be found for logger(org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我似乎从我的应用程序中获取日志到我的 RollingFile 中,但我不明白为什么这个休眠记录器没有使用相同的附加程序。
非常感谢任何帮助!
【问题讨论】:
为了澄清你想让hibernate附加到同一个文件? @Ishnark 正确,我希望它们都附加到同一个文件中 我认为您必须专门告诉休眠记录器以记录到文件。<logger name="org.hibernate" level="info"><appender-ref ref="MY_APP"/></logger>
@Ishnark 很抱歉回复晚了,嗯,这似乎也不起作用,同样的警告信息
【参考方案1】:
我遇到了类似的问题,但我的问题与我创建的特定类有关,而不是在库中。但是,我发现该错误专门针对 log4j2
是因为我使用了不正确的 Logger。
我的代码曾经是:
import org.apache.log4j.Logger;
public class SomeClass
static Logger logger = Logger.getLogger(SomeClass.class);
最终对我有用的是:
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class SomeClass
static Logger logger = LogManager.getLogger(SomeClass.class.getName());
注意:导入的差异以及“创建”记录器的方式。
这就是为我解决这个确切错误的方法,但它不在库中。
对我来说,我的项目中也有 Hibernate,但没有任何额外的配置,Hibernate 会自动将日志记录到我的所有附加程序中。他们可能已经在更新包中修复了这个问题。
SUGGESTION(如果尚未修复)-也许尝试升级 Hibernate 的包/库,看看它是否有效。或者,看看你是否可以找出记录器是如何创建的,以便使用它使用org.apache.logging.log4j.Logger
INSTEAD of org.apache.log4j.Logger
【讨论】:
【参考方案2】:其实控制台显示的事实
log4j:WARN No appenders could be found for logger(org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
表示 log4j 1.x jar 仍然存在于类路径中,并且没有提供 log4j 1.x 配置。解决此问题的方法是将 log4j 1.x jar 替换为 Log4j 2 中的 log4j-1.2-api jar。
【讨论】:
以上是关于log4j2 未找到 1 个记录器的附加程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别
log4j2 - Syslog 附加程序和 PatternLayout