2017-07-03 28 views
0

我在tomcat8中运行spring-boot 应用程序,并使用log4j2进行日志记录。 问题:如何在tomcat中设置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中工作?

回答

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 
相关问题