2017-07-03 51 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