Файл конфигурации log4j2 в поиске Spring Config Server не работает

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

Пример моего файла конфигурации:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="60">
    <Appenders>
        <Console name="ConsoleJSONAppender" target="SYSTEM_OUT">
            <JSONLayout complete="false" compact="false" eventEol="true" properties="false" stacktraceAsString="true">
                <KeyValuePair key="correlation-id" value="${ctx:CORRELATION_ID}" />
                <KeyValuePair key="timestamp" value="${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}" />
            </JSONLayout>
        </Console>

    </Appenders>

    <Loggers>
        <AsyncRoot level="info">
            <AppenderRef ref="ConsoleJSONAppender" />
        </AsyncRoot>
        
    </Loggers>

</Configuration>

Конфигурация правильно загружается с сервера конфигурации, поскольку журналы имеют формат json, но ${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ} и ${ctx:CORRELATION_ID} не разрешены. Еще раз хочу отметить, что если файл конфигурации находится в папке ресурсов, это работает. Так что это наводит меня на мысль, что проблема в файле конфигурации, находящемся на сервере конфигурации. Есть ли какие-либо ограничения на поиск, если файл находится на сервере конфигурации?

Спасибо.


person Joao Moreira    schedule 31.07.2020    source источник


Ответы (1)


Я предполагаю, что вы ознакомились с примером проекта по адресу https://github.com/apache/logging-log4j2/tree/release-2.x/log4j-spring-cloud-config/log4j-spring-cloud-config-samples ? У него есть как образец клиента, так и образец службы Spring Cloud Config с собственным репозиторием. Если вы посмотрите на образец log4j2.xml в каталоге config-repo сервера, вы заметите, что многие переменные поиска экранированы как \${ctx:CORRELATION_ID}. Без этой конфигурации облака Spring попытается разрешить переменную, используя имеющуюся у нее информацию, чего будет немного. Если присутствует, escape-символ будет удален Spring Cloud Config, поскольку конфигурация будет передана обратно в Log4j.

Что касается monitorInterval, при установке его для SpringCloudConfig, если это положительное значение, Log4j будет выполнять вызов GET для URL-адреса через каждый интервал. Если он получает ответ Not Modified, ничего не происходит. Если он получит конфигурацию, он переконфигурируется. Если monitorInterval равен 0, тогда Log4j будет прослушивать событие от Spring Cloud Bus, указывающее, что произошло изменение, когда он запрашивает конфигурацию. Опять же, если возвращается Not Modified, значит, что-то еще вызвало событие, и конфигурация останется нетронутой.

Чтобы уведомление Spring Cloud Bus работало, необходимо настроить Spring Cloud Config для отправки событий в приложения, а приложения должны быть настроены для их прослушивания с использованием того же типа брокера сообщений, который используется сервером. Наконец, серверу Spring Cloud Config требуется веб-хук, настроенный для прослушивания событий из резервного репозитория, если вы используете Git. См. https://cloud.spring.io/spring-cloud-config/multi/multi__push_notifications_and_spring_cloud_bus.html, чтобы получить дополнительную информацию об этом.

person rgoers    schedule 03.08.2020
comment
Спасибо за быстрый ответ, rgoers. Как-то мне не хватает escape-символа. Что касается monitorInterval, я заставляю его работать с зависимостью log4j-spring-cloud-config-client. Но проблема в том, что когда я добавляю эту зависимость, моя система сообщений перестает работать без ошибок. Просто сообщения больше не отправляются. Я предполагаю, что это связано с некоторыми конфликтами в конфигурации rabbitmq. У вас есть идеи, почему? - person Joao Moreira; 07.08.2020