我有一个在服务器后台运行的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编译程序集:单个
答案 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" />