如题,使用最近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

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《使用Logback的项目运行时自动创建catalina.home_IS_UNDEFINED文件夹
   

还没有人抢沙发呢~