当前位置: 首页 > 知识库问答 >
问题:

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

司空宗清
2023-03-14

我有一个在服务器后台运行的java应用程序。服务器运行的是Amazon Linux2,我的应用程序使用的是log4j V2.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> 
    <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>

共有1个答案

呼延承平
2023-03-14

当我在服务器上编译jar(而不是在IntelliJ中编译它并将其FTPing到服务器)时,我得到了要删除的旧的滚动日志文件。我不知道为什么在服务器上编译jar会有什么不同。如果有人对此有任何见解可以分享,请这样做。我的服务器运行的是Amazon Linux2,而我的计算机运行的是OSX10.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" />
 类似资料:
  • 问题内容: 是否可以在任何操作系统(例如Windows,Linux,Mac OS X)上执行JAR文件?我想构建一个要在Linux,Windows和Mac OS X上运行的简单应用程序。JAR文件可以在安装了Java的任何操作系统上运行吗? 问题答案: Jar文件可在存在JVM的任何OS上运行。

  • 问题内容: 一直在尝试学习Docker,让我感到困惑的是,在Docker容器中实际上如何运行与主机操作系统不同的Linux。 如果我们假设我的Docker主机正在运行RedHat并且我从Ubuntu映像启动了一个容器,那么是否满足以下条件?: 从逻辑上讲,如果Ubuntu映像占用空间约为550MB,那么Doc​​ker Daemon是否会从映像注册表中实际下载(价值550MB)Ubuntu映像以创

  • 问题内容: 我针对javaee-api编译了程序。但是,对于Junit测试,我必须使用特定的实现(例如glassfish的javaee.jar)来避免类似java.lang.ClassFormatError的错误:类文件javax / persistence / Persistence中不是本机或抽象的方法中的缺少Code属性(另请参见1)。 因此,请避免使用仅在glassfish实现中可用的方法

  • 问题内容: 我已经在系统中配置了网格并编写了测试脚本。我可以在任何指定的操作系统和任何浏览器上运行测试,但一次只能在一个操作系统和一个浏览器上运行测试,而不是同时运行所有操作系统和所有浏览器。这是我所做的。请告诉我如何配置它,以便它可以一次在已配置的操作系统中运行。 我的使用Java的脚本如下: Testng.xml: 问题答案: 阿迪亚 您要在不同或相同系统上运行并行测试的代码(testng.x

  • 您好,我最近在spring项目中将日志记录从log4j迁移到了log4j2。 一切正常,但我想知道如何设置属性

  • 问题内容: 我必须使用大量未明确指定serialVersionUID的已编译Java类。由于它们的UID是由编译器任意生成的,因此即使实际的类定义匹配,许多需要序列化和反序列化的类最终也会导致异常。(当然,这是所有预期的行为。) 对我来说,返回并修复所有第3方代码是不切实际的。 因此,我的问题是:是否有任何方法可以使Java运行时 忽略 serialVersionUID中的差异,并且仅在结构上存在