我创建了一个命令行工具,它作为可执行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的位置?提前谢谢。
答案 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>