【问题标题】:log4j2 No appenders found for 1 loggerlog4j2 未找到 1 个记录器的附加程序
【发布时间】: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-%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附加到同一个文件?
  • @Ishnark 正确,我希望它们都附加到同一个文件中
  • 我认为您必须专门告诉休眠记录器以记录到文件。 &lt;logger name="org.hibernate" level="info"&gt;&lt;appender-ref ref="MY_APP"/&gt;&lt;/logger&gt;
  • @Ishnark 很抱歉回复晚了,嗯,这似乎也不起作用,同样的警告信息

标签: java hibernate log4j log4j2


【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2014-01-17
      • 1970-01-01
      • 2012-09-13
      • 2014-11-17
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多