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

时间:2017-07-03 08:33:18

标签: java spring spring-boot log4j2 tomcat8

我在spring-boot中运行war tomcat8个应用,并使用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那样工作?

1 个答案:

答案 0 :(得分:0)

找到原因:

如果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