У меня есть клиент-серверное приложение, в котором я хочу выводить свои записи журнала на стороне сервера в разные папки / файлы на основе параметров, переданных от клиента. В моем 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)