我使用SLF4J和java for logs,我知道如何保存到特定位置,但我希望日志将在jar运行文件夹下创建。
我怎样才能在logback.xml
中设置它?
我尝试不定义DEV_HOME
值或./
,但它没有在jar位置创建日志。
这是我目前的配置:
<property name="DEV_HOME" value="user.home" />
<appender name="FILE-AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/debug.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.FAM" level="debug"
additivity="false">
<appender-ref ref="FILE-AUDIT" />
</logger>
<root level="error">
<appender-ref ref="FILE-AUDIT" />
</root>
答案 0 :(得分:1)
写作
<property name="DEV_HOME" value="user.home" />
将DEV_HOME的值设置为字符串&#34; user.home&#34;。您可能想要的是
<property name="DEV_HOME" value="${user.home}" />
请注意上面的 $ {} 。
此外,基于大小和时间的语法为simplified。但是,您使用的具有SizeAndTimeBasedFNATP的旧语法仍然有效。
要查找给定jar文件所在文件夹的路径,下面是示例代码,以帮助您前进。请注意,假定C类可用并位于您要查找的其中一个jar文件中。
String cClassAsResource = C.class.getName().replace('.', '/')+".class";
System.out.println(cClassAsResource);
URL pathToClassAsURL = C.class.getClassLoader().getResource(cClassAsResource);
// Assume that pathToClassAsURL.toString() begins with "jar:file:/"
String prefix = "jar:file:/";
String jarPathPlusTrailingClass = pathToClassAsURL.toString().substring(prefix.length());
System.out.println(jarPathPlusTrailingClass);
int indexOfExclamationMark = jarPathPlusTrailingClass.indexOf('!');
String jarPath = jarPathPlusTrailingClass.substring(0, indexOfExclamationMark);
System.out.println(jarPath);
对于需要自定义计算的变量,logback允许您define them on the fly。