[英]How to set log4j2 folder in tomcat?
我正在tomcat8
运行spring-boot
war
应用程序,并使用log4j2
进行日志记录。 问题:
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<RollingRandomAccessFile name="APP" fileName="logs/my-application.log"
filePattern="logs/archive/my-application-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d %p %c{1.}: %m%n" charset="UTF-8" />
<Policies>
<TimeBasedTriggeringPolicy modulate="true"/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="APP" />
</Root>
</Loggers>
</Configuration>
pom.xml中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
</dependency>
结果:日志位于/var/log/tomcat8/my-application.log
。 /var/log/tomcat8/my-application.log.gz
的档案
这真是奇怪。 选择正确的记录器文件名。 但是现在是文件夹。
问题:为什么不考虑我的/logs
文件夹? 为什么压缩的存档名称不包含时间戳?
旁注:按照我的想法将应用程序作为jar
运行是完美的。 它会自动在类路径根目录下创建一个/logs
文件夹。 并且所有文件都将在带有时间戳记的午夜正确移动到/archive
!
但是,为什么这不能像tomcat那样起作用?
找到原因:
如果fileName
以/
开头,则相对于catalina.base=/var/lib/tomcat8
该文件夹内是符号链接/logs
。 因此, fileName="logs/myapp"
将跟随该符号链接。 指向/var/log/tomcat8
。
结果,所有文件都被写入该文件夹。 此外,一些tomcat默认logrotate
似乎会占用该文件夹中的所有文件,并自动对其进行压缩。 因此,log4j没有机会应用logrotate。
解决方案:只需设置文件名和其他子路径。 我用了:
fileName="logs/logs/my-application.log"
filePattern="logs/logs/my-app..."
这会将日志文件移至:
/var/log/tomcat8/logs
/var/log/tomcat8/logs/archive
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.