Как установить папку log4j2 в Tomcat?
Я бегу 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
папка не учтена? И почему имя архива не содержит метки времени?
Sidenote: запуск приложения в виде jar
по моему идея работает отлично. Это автоматически создает /logs
папка под корнем пути к классам. И все файлы правильно перемещены в /archive
в полночь с отметкой времени!
Но почему это не работает, как в Tomcat?
1 ответ
Нашел причину:
Если fileName
начинается без /
, это берется относительно catalina.base=/var/lib/tomcat8
Внутри этой папки есть символическая ссылка /logs
, таким образом fileName="logs/myapp"
будет следовать этой символической ссылке. Что указывает на /var/log/tomcat8
,
В результате все файлы записываются в эту папку. Далее, какой-то кот по умолчанию logrotate
Кажется, что он берет все файлы в этой папке и автоматически сжимает его. Таким образом, log4j не имеет возможности применить logrotate.
Решение: просто укажите дополнительный путь к имени файла. Я использовал:
fileName="logs/logs/my-application.log"
filePattern="logs/logs/my-app..."
Это переместит файлы журнала в:
/var/log/tomcat8/logs
/var/log/tomcat8/logs/archive