log4j2不适用于JAR

时间:2015-07-23 10:53:32

标签: java eclipse logging classpath log4j2

我正在尝试将null用于动态日志目录位置。我为此编写了代码:

log4j2

log4j2.xml如下所示:

DateFormat dateFormat = new SimpleDateFormat(Constants.DATE_FORMAT);
Date date = new Date();

String currentDir = System.getProperty("user.dir") + "/" + Constants.OUTPUT_FOLDER_NAME + "/" + dateFormat.format(date);
System.setProperty("logDir", currentDir);
final LoggerContext ctx = (LoggerContext)LogManager.getContext(false);
ctx.reconfigure();

当我在Eclipse中运行时,文件生成正常,但是当我使用包含类路径上编译的主类的JAR文件运行我的程序的主类时:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
    <Appenders>
        <File name="file" fileName="${sys:logDir}/log.log">
            <PatternLayout>
                <Pattern>%d{ISO8601} [%t] %C %M - %p: %m%n</Pattern>
            </PatternLayout>
        </File>

        <File name="report" fileName="${sys:logDir}/report.txt">
            <PatternLayout>
                <Pattern>%m%n</Pattern>
            </PatternLayout>
        </File>

        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>%d{ISO8601} - %p: %m%n</Pattern>
            </PatternLayout>
        </Console>
    </Appenders>

    <Loggers>

        <Logger name="Report" level="info" additivity="false">
            <AppenderRef ref="report" level="INFO"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="file" level="INFO" />
            <AppenderRef ref="console" level="INFO" />
        </Root>
    </Loggers>
</Configuration>

它只会将“错误”消息打印到控制台。目录结构和文件也不会创建。我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

显然,Logger无法找到您的配置。它是在JAR中导出的(使用归档浏览器查看)?试着找出原因并不是它必须在哪里更新你的程序。

答案 1 :(得分:0)

必须使用-Dlog4j.configurationFile指定位置,而不是-Dlog4j.configuration

请参阅http://logging.apache.org/log4j/2.x/faq.html#config_location