繁体   English   中英

如何在tomcat中设置log4j2文件夹?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM