Контекстные переменные Log4j не подставляются - PullRequest
0 голосов
/ 22 октября 2019

У меня есть клиент-серверное приложение, в котором я хочу выводить свои записи журнала на стороне сервера в разные папки / файлы на основе параметров, переданных от клиента. В моем log4j2.xml я определил свойства, которые я обновляю, основываясь на параметрах, переданных от клиента.

<Properties>
        <Property name="appName">${ctx:applicationName}</Property>
        <Property name="eventID">${ctx:eventID}</Property>
</Properties>

....

    <RollingFile name="devParAppender" filePattern="${localPath}/${eventID}/SERVER_${appName}_${eventID}.%d{yyyy-MM-dd}.log"
                     immediateFlush="false"  createOnDemand="true">

 </RollingFile>

Приложение моего сервера всегда работает. Когда я запускаю свой клиент в первый раз, все инициализируется правильно, и выходные данные на стороне сервера отправляются в нужную папку и файл, основываясь на значениях "appName" и "eventID". Однако, когда я делаю последующие вызовы на сервер и передаю разные значения appName / eventID, выходные данные продолжают регистрироваться в исходном файле журнала. Чтобы получить Logger на стороне сервера, я вызываю LogManager:

Logger logger = LogManager.getLogger("SERVER_LOGGER");

Я также заметил, что при первоначальной конфигурации вызова выполняется инициализация, и я вижу это в выводе консоли:

 DEBUG Initializing configuration XmlConfiguration

Каждый последующий вызов пропускает этот шаг.

I, чтобы обновить контекстные переменные, которые я вызываю

ThreadContext.put(key,vlaue)
...