Установить 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 мог выполнять замену свойства.
Пожалуйста, поделитесь своими мыслями.