如题,使用最近Logback的项目运行时自动创建了catalina.home_IS_UNDEFINED文件夹。
配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n</pattern>
</encoder>
</appender>
<appender name="MY_APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.home}/logs/myApplication.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${catalina.home}/logs/myApplication.%d{yyyy-MM-dd}.log</FileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%-5p %date{HH:mm:ss.SSS} [%t] %c{1} - %m%n</pattern>
</encoder>
<append>true</append>
</appender>
<logger name="org.springframework" level="WARN"/>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="MY_APP_LOG"/>
</root>
</configuration>
分析原因:
根据文件夹的名即可猜测出 catalina.home 这个属性 没有被定义。
而catalina.home 我们知道是Tomcat有关。
也就是说只有项目在tomcat启动时才会被填充这个属性。
通过在stackoverflow中查找方案得到两个方案:
方案1: 在logback.xml中设置属性前判断是否被定义
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<if condition='isDefined("catalina.home")'>
<then>
<property name="log.folder" value="${catalina.home}/logs"/>
</then>
<else>
<property name="log.folder" value="./target/logs"/>
</else>
</if>
<appender name="companyMyAppServiceAppender" class="ch.qos.logback.core.FileAppender">
<file>${log.folder}/company.myApp.log</file>
...
</appender>
...
</configuration>
如果没有定义的话 日志文件将被写在在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>
原文链接:https://blog.csdn.net/w605283073/article/details/80049872
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~