log4j2找不到1个记录器的appender

时间:2017-05-09 23:55:36

标签: java hibernate log4j log4j2

我无法配置我的log4j2.xml文件以包含hibernate日志记录。

这是我的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-%d{yyyy-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记录器没有使用相同的appender。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我有一个类似的问题,但是我的与我创建的特定类有关,而不是与图书馆中的某个类有关。但是,我发现该错误专门针对log4j2,是因为我使用了错误的记录器。

我的代码曾经是:

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会自动记录到我所有的附加程序中。他们可能已经在软件包更新中解决了此问题。

建议(如果尚未解决)-可能尝试为Hibernate升级软件包/库,并查看其是否有效。或者,查看是否可以找到记录器的创建方式,以便利用它使用org.apache.logging.log4j.Logger的{​​{1}} INSTEAD

答案 1 :(得分:0)

实际上,控制台显示的事实

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 2中的log4j-1.2-api jar替换log4j 1.x jar。