在不同的操作系统上运行时,使用maven编译JAR会忽略log4j2属性

时间:2018-08-13 20:46:51

标签: java maven log4j2

我有一个在服务器后台运行的Java应用程序。该服务器运行的是Amazon Linux 2,我的应用程序使用的是log4j v 2.11.0。我们使用Maven在服务器上编译一个可执行jar,然后执行所述jar运行应用程序。我遇到的问题是此应用似乎忽略了我的log4j2.xml文件中指定的某些值(特别是我的SizeBasedTriggeringPolicy大小和IfLastModified年龄值)。

使用的Maven命令:

mvn clean compile assembly:single

这是我的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<Properties>
    <Property name="log-path" >${sys:log_dir}</Property>
    <Property name="log-level" >${sys:log_lvl}</Property>
    <Property name="level-num" >${sys:lvl_num}</Property>
    <Property name="log-project-name">${sys:log_name}</Property>
    <Property name="log-pattern">%d{ISO8601} %-5p [%t|%c{1}] %m\n</Property>
    <Property name="rollover-strategy-max">7</Property>
    <Property name="rolling-size-based">5 KB</Property>
</Properties>

<Appenders>

<RollingFile name="logFile" fileName="${log-path}/${log-project-name}-logger.log" filePattern="${log-path}/${log-project-name}-debug-%d-%i.log.zip">
    <PatternLayout>
        <pattern>${log-pattern}</pattern>
    </PatternLayout>
    <Policies>
        <SizeBasedTriggeringPolicy size="${rolling-size-based}" />
    </Policies>
    <DefaultRolloverStrategy max="${rollover-strategy-max}">
        <Delete basePath="${log-path}" maxDepth="1">
            <IfFileName regex="foobar-*.log.zip" />
            <IfLastModified age="21D" />
        </Delete>
    </DefaultRolloverStrategy>
</RollingFile>

</Appenders>
<Loggers>
    <logger name="io.switchfour" level="${log-level}" additivity="false">
        <AppenderRef ref="logFile" level="${log-level}" />
    </logger>
</Loggers>
</configuration> 

这是我正在使用的Maven依赖项

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.0</version>
    </dependency>

使用此配置,我有一个活动的日志文件名为foobar-logger.log,当滚动时,它将变为foobar-debug-2018-08-13-1.log.zip。这就是我的期望。但是,我也希望任何早于21天的存档日志文件都将被删除。但是没有文件被删除。我尝试将某些文件的chmod权限设置为777,但没有执行任何操作。我还尝试过在我的IfFileName标记(通过bash的ls正确返回已归档日志文件的列表)中使用正则表达式和glob以及我年龄的“ 21D”和“ 21d”之间进行切换。我一直在寻找解决方案已有好几天了,但是无论我尝试什么,它似乎从未删除任何旧文件。其中一些文件的发布时间超过2个月。我不确定这是否相关,但是大小限制(5 KB)似乎经常被忽略,但并非总是如此。任何帮助将不胜感激。谢谢。

编辑:

我不确定这是导致我出现问题的原因,但似乎是在本地计算机(运行OSX 10.13.6)上编译jar而不是在服务器(运行Amazon Linux 2)上对其进行编译我的log4j2.xml文件中的age值将被忽略。有人可以通过以下maven命令了解在不同操作系统上编译jar的影响(如果有的话):

MVN clean编译程序集:单个

1 个答案:

答案 0 :(得分:0)

我在服务器上编译jar时,而不是在IntelliJ中将其编译并通过FTP传输到服务器时,将旧的滚动日志文件删除。我不确定为什么在服务器上编译jar会有所不同。如果有人对此有任何见识可以分享,请这样做。我的服务器正在运行Amazon Linux 2,而我的计算机正在运行OSX 10.13.6。

我使用以下maven命令来编译jar:

mvn clean compile assembly:single

我也改变了

<IfFileName regex="foobar-*.log.zip" />
<IfLastModified age="21D" />

<IfFileName glob="foobar-*.log.zip" />
<IfLastModified age="21d" />