JAR 作为应用程序安装时未生成应用程序日志

问题描述

我有一个配置了 log4j 的 Java 应用程序来记录应用程序日志。当我将它作为 java -jar 运行时,会生成应用程序日志。但是我需要分发与 Windows 安装程序相同的应用程序,所以我使用 launch4j 并将 JAR 转换为 exe 文件。然后我使用带有 Inno Setup 的 exe 文件来创建一个 Windows 安装程序,JDK 打包在安装程序中。该应用程序可以在 Program Files (x86) 下成功安装并运行良好。但不会生成应用程序日志。当我创建 JAR 时,在打包过程中 log4j.xml 包含在 JAR 中。所以,它是由launch4j创建的exe的一部分。 log4j.xml 配置如下:

  `<appender name="DD_FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="10MB" />
    <param name="File" value="logs/rolling_app.log" />
    <param name="MaxBackupIndex" value="10" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %c{2} [%L] %x - %m%n" />
    </layout>
   </appender>`

我尝试在launch4j添加系统变量为-Dlog4j.configuration=log4j.xml,但没有生成日志。

提前感谢您的指点。

解决方法

由于在程序文件夹下创建文件需要管理员权限,因此相对路径不起作用。当我以管理员身份启动应用程序时,在 app 文件夹下生成的日志进一步证明了这一点。在 log4j 中,我将完整路径指定为 C:/logs/ 并在 C 驱动器下创建了日志文件夹。现在应用程序日志文件在正常启动模式下生成。因为我不能指望应用程序以管理员模式启动,所以我会在 Program Files 文件夹之外配置一个路径。