在构建时创建在同一目录中的日志记录日志

时间:2014-09-05 19:45:32

标签: java logging gradle logback

我创建了一个命令行工具,它作为可执行jar发布。当有人使用我的工具时,我不知道罐子的位置。所有日志记录都是通过logback完成的。我希望我的日志文件转到jar文件所在的目录,无论jar位于何处,无论当前目录是什么。

我当前的logback.xml文件如下所示。

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>admintool.log</file>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"} [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="FILE" />
    </root>
</configuration>

有谁知道如何让日志到达jar的位置?提前谢谢。

1 个答案:

答案 0 :(得分:3)

有一种方法可以在运行时为Logback配置提供属性值:

http://logback.qos.ch/manual/configuration.html#definingPropsOnTheFly

您需要创建一个实现PropertyDefiner接口的类并返回jar的位置

public class MyPropertyDefiner extends PropertyDefinerBase {
    @Override
    public String getPropertyValue() {
        return MyPropertyDefiner.class.getProtectionDomain().getCodeSource().getLocation().getFile();
    }
}

在你的logback.xml中你可以指定类似这样的东西

<configuration>
    <define name="jarLocation" class="MyPropertyDefiner"/>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${jarLocation}</file>
        ...
    </appender>
    ...
</configuration>