使用Logback的專案執行時自動建立catalina.home_IS_UNDEFINED資料夾
阿新 • • 發佈:2018-12-31
如題,使用最近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>