Как установить папку log4j2 в Tomcat?

Я бегу spring-bootwar приложение в 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
Другие вопросы по тегам