Установить log4j2 fileappender fileName во время выполнения

Обновление log4j1.2 до log4j2. Я пытаюсь перенести конкретную логику и возникают проблемы.

Логика - в подклассе RollingFileAppender я обновляю значение параметра "file". Так что это: <param name="File" value="/parent/child/xyz.log" />будет выглядеть во время выполнения как: <param name="File" value="/parent/child/websphere_server_jvm1_name/xyz.log" />

Обратите внимание, как я добавил новую дочернюю папку листа, чтобы журналы от 1 jvm были отделены от других. Я получаю websphere_server_jvm1_name, вызывая websphere API в пользовательском классе appender.

Это логика, которую я пытаюсь перенести на log4j2. Проблема в том, что я не могу создать подкласс log4j2 fileappender, так как это последний класс.

Согласно https://logging.apache.org/log4j/2.x/manual/configuration.html, сценарии разрешены, но не нашли никакой документации о том, как сценарии вызовов Java внутри <File> элемент.

Обратите внимание, что единственный способ получить имя сервера websphere - это вызвать com.ibm.webpshere.runtime.ServerName.getDisplayName(), Каким-то образом мне нужно получить значение и изменить приведенный ниже атрибут fileName в log4j2 вместе с ним, как вы видите ниже (обратите внимание на имя конечной папки websphere_server_jvm1_name).

<File name="Fileappender_dynamic1" fileName="/parent/child/websphere_server_jvm1_name/xyz.log">
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
  </PatternLayout>
</File>

Кроме того, на данный момент я не могу придумать, как создать имя сервера websphere через свойство, чтобы log4j2 мог выполнять замену свойства.

Пожалуйста, поделитесь своими мыслями.

0 ответов

Другие вопросы по тегам