java - 为什么catalina.home_IS_UNDEFINED目录是Logback在同一个项目目录下生成的?

标签 java tomcat playframework-2.0 logback

我已经为我的应用程序编写了 logback 配置文件,但是当我进行 maven clean install(mvn clean install) 时,它在项目目录中生成了一个带有日志文件的 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>

最佳答案

背景

此属性加载失败,因为它仅由 tomcat 填充。它不是由 ma​​ven 编译任务填充的。

解决方案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>

这将在编译时在目标文件夹中创建日志文件,这些文件将被清除。

解决方案2

“重写”值:

<property name="log.folder" value="./target/logs"/>
<if condition='isDefined("catalina.home")'>
    <then>
        <property name="log.folder" value="${catalina.home}/logs"/>
    </then>
</if>

注意!

并且不要忘记导入 maven janino 依赖项

<!-- The org.codehaus.janino:commons-compiler:2.7.8 dependency -->
<!-- will be automatically pulled in by Maven's transitivity rules -->
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>2.7.8</version>
</dependency>

关于java - 为什么catalina.home_IS_UNDEFINED目录是Logback在同一个项目目录下生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184485/

相关文章:

java - Logback:如何从日志文件中删除类名和日志级别?

java - 如何避免 Firefox 中的窗口下载​​弹出窗口使用 Java selenium?我需要自动下载而不询问弹出窗口吗?

postgresql - 为什么编译失败并显示 "not found: value Users"?

mysql - Ebean 调用存储过程并将 ResultSet 转换为 Model

java - java中的EscPos打印机事件

java - entityManager.persist(用户) -> javax.persistence.EntityExistsException : User@b3089 is already persistent

java - Web 服务器上的身份验证和授权?

java - 什么 'application server should I use' ?没有那么复杂的应用程序,转换数据,发送数据

tomcat - 使用 Mule ESB 将数据公开为 ODATA API

scala - 持续调度