5

我在正确应用log4j2.xml自动配置时遇到问题,我认为这与我的文件夹排列有关。
我正在使用maven添加 log4j2 库并将我的项目安排如下:
- 一个项目包含所有“公共”类,由我的系统的服务器和客户端使用。
- 另一个“核心”项目 - 服务器端应用程序。
两个项目都使用相同的通用包层次结构(如com.foo.specific.package

在 Common 项目中,我定义了一个记录器包装器:

public class LogWrapper
{
    static Logger systemParentLogger = LogManager.getLogger("com.foo");

    public static Logger getLogger(Class<?> cls)
    {
        return LogManager.getLogger(cls.getName());
    }
}

此外,Common 项目包含META-INF下的log4j2.xml文件(以及用于 Hibernate 的 persistence.xml 文件)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">

    <appenders>
        <appender type="RollingFile" 
            name="MyFileAppender" 
            fileName="logs/app.log" 
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n"/>
        </appender>
    </appenders>

    <loggers>
        <root level="error">
            <appender-ref ref="MyFileAppender"/>
        </root>

        <logger name="com.foo" level="info" additivity="false">
            <appender-ref ref="MyFileAppender"/>
        </logger>

        <logger name="org.hibernate" level="error">
            <appender-ref ref=MyFileAppender"/>
        </logger>
    </loggers>

</configuration>

在 Core 项目中运行示例代码(使用我编写的 LogWrapper 和一些 JPA voodoo)时,我仍然可以看到 INFO hibernate 日志,并且没有创建日志文件。我应该声明,在调试代码时,我可以看到获取的记录器被赋予了一些奇怪的值“ com.foo.core.persistence.PersistenceXMLTest:ERROR in sun.misc.Launcher$AppClassLoader@2f600492

4

1 回答 1

1

log4j2.xml放置在一个“文件夹”中,在 Eclipse 术语中是“不在类路径上”。将META-INF
更改为“源文件夹”解决了这个问题。 此外,未正确定义log4j2.xml文件。这些是需要的修改:

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">

<appenders>
    <RollingFile name="MyFileAppender" 
        fileName="../Logs/app.log" 
        filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <pattern>%d %p %C{1.} [%t] %m%n</pattern>
        </PatternLayout>
        <Policies>
            <OnStartupTriggeringPolicy />
            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingFile>
</appenders>

<loggers>
    <root level="error">
        <appender-ref ref="MyFileAppender"/>
    </root>

    <logger name="com.foo" level="info" additivity="false">
        <appender-ref ref="MyFileAppender"/>
    </logger>
</loggers>

</configuration>

仍然无法将org.hibernate记录器重定向到我的日志,但至少我让记录器工作

于 2013-02-02T09:46:07.023 回答