如题,使用最近Logback的项目运行时自动创建了catalina.home_IS_UNDEFINED文件夹。
配置文件如下:
%date{HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n
${catalina.home}/logs/myApplication.log
${catalina.home}/logs/myApplication.%d{yyyy-MM-dd}.log
%-5p %date{HH:mm:ss.SSS} [%t] %c{1} - %m%n
true
分析原因:
根据文件夹的名即可猜测出 catalina.home 这个属性 没有被定义。
而catalina.home 我们知道是Tomcat有关。
也就是说只有项目在tomcat启动时才会被填充这个属性。
通过在stackoverflow中查找方案得到两个方案:
方案1: 在logback.xml中设置属性前判断是否被定义
${log.folder}/company.myApp.log
...
...
如果没有定义的话 日志文件将被写在在target文件夹下的logs文件夹下。
方案2: 重写值
<property name="log.folder" value="./target/logs"/>
<if condition='isDefined("catalina.home")'>
<then>
<property name="log.folder" value="${catalina.home}/logs"/>
</then>
</if>
就是如果定义了catalina.home,那么再次设置log.folder属性的值。
由于使用了条件语句,运行如果提示Could not find Janino library on the class path 错误需要添加janino依赖:
<!--日志系统-->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- The org.codehaus.janino:commons-compiler:2.6.1 dependency -->
<!-- will be automatically pulled in by Maven's transitivity rules -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.6</version>
</dependency>