Как предотвратить дублирование входа в консоль tomcat в catalina.out? - PullRequest
2 голосов
/ 03 июля 2019

Я развертываю приложение war на tomcat веб-сервере.Проблема: запись в журнал ведется как в журналах приложений, так и в журналах консоли catalina (которые catalina.out).

Как я могу предотвратить повторяющийся вход в этот файл catalina?

log4j2-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %p %c{1.}: %m%n"/>
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
        </Console>

        <RollingRandomAccessFile name="APP" fileName="/logs/application.logs" filePattern="/logs/application-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="%d %p %c{1.}: %m%n"/>
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>

            <Policies>
                <TimeBasedTriggeringPolicy modulate="true"/>
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="APP" />
        </Root>
    </Loggers>
</Configuration>

Я также уже удалил java.util.logging.ConsoleHandler из /opt/tomcat/conf/logging.properties:

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler

Результат: запись по-прежнему ведется на catalina.out.

1 Ответ

2 голосов
/ 03 июля 2019

Удалите это из элемента <Loggers>.

 <AppenderRef ref="CONSOLE" />

Объяснение: файл Catalina.out записывает все, что записано в стандартный вывод Tomcat и стандартные потоки ошибок.Ваш CONSOLE appender настроен на запись в стандартный вывод.

Похоже, что настройки log4j2-spring.xml имеют приоритет над logging.properties.Кто-то должен взглянуть на ваши настройки, чтобы понять, почему.

(Я предполагаю, что Spring или что-то еще дает JVM Tomcat опцию -D для установки системного свойства, определяющего местоположение конфигурации регистрации. Механизмы, которые log4j2 использует для поиска конфигураций, описаны в https://logging.apache.org/log4j/2.x/manual/configuration.html)


Тогда у меня все еще есть проблема: в моей локальной среде разработчика я все еще хотел бы получать любые журналы на консоль, чтобы не приходить в приличные файлы журналов.Я хотел бы только отключить ведение журнала консоли на удаленных / тестовых / производственных серверах.

В зависимости от того, где находится файл log4j2-spring.xml (в файле WAR?), Вы можете создать два варианта.файла WAR с различными файлами конфигурации.

Кроме того, должна быть возможность поместить альтернативный файл log4j2-spring.xml в каталог Tomcat common, чтобы он переопределял версию в файле WAR.

...