我为我的应用程序编写了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>
答案 0 :(得分:9)
此属性加载失败,因为它仅由tomcat填充。它没有被 maven编译任务填充。
在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>
这将在编译时在目标文件夹中创建日志文件,该文件将被清除。
“重写”值:
<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>
答案 1 :(得分:3)
我遇到了类似的问题并确定它是由我的单元测试缺乏正确的Tomcat环境引起的。
我的最小解决方案是将以下src/test/resources/logback.xml
添加到我的Maven项目目录中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="catalina.home" value="target" />
</configuration>
单元测试生成的日志最终出现在target
目录中,而不是项目的顶级目录。
答案 2 :(得分:1)
我建议不要依赖janino依赖项(在这种情况下为1 MB,什么也不做),有一种使用logback的默认值实现的更简单解决方案,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="base.folder" value="${catalina.home:-./target}"/>
<appender name="MY_APP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${base.folder}/logs/myApplication.log</file>
...
</appender>
...
</configuration>
在变量名和默认值之间寻找:-
字符。
如果${catalina.home}
变量为空,将使用默认值(在这种情况下为./target
)。
答案 3 :(得分:0)
<file>${catalina.home}/logs/myApplication.log</file>
在服务器(tomcat)启动期间。 Logback API尝试将logback.xml中的$ {catalina.home}变量替换为环境变量,通常是-Dcatalina.home java环境,该环境通常等于内部由tomcat“ catalina.sh”设置的CATALINA_HOME。
如果环境变量(即“ catalina.home”)的设置是否正确,则需要检查tomcat的“ catalina.sh”或“ catalina.bat”。
“ catalina.home_IS_UNDEFINED”表示Logback无法将其替换为任何系统或环境变量。
答案 4 :(得分:-3)
尝试改变:
<logger name="org.springframework" level="WARN"/>
为:
<logger name="org.springframework" level="OFF"/>