Замена свойства Log4J2 - по умолчанию
Мне просто интересно, есть ли способ предоставить значение по умолчанию для замены свойств в LOG4J?
Я хочу передать путь к файлу в java-системном свойстве, а затем использовать его с "$ {env: mySystemProperty}". Но что, если разработчик забывает установить это свойство? Тогда я хотел бы иметь какое-то значащее значение по умолчанию, определенное в log4j2.xml.
Любая идея, как достичь этой функциональности?
EDIT:
Замена env для меня не работает:
standalone.conf
-DoauthLoginLogPath=/path/oauth2.log
log44j2.xml
<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">
Я могу видеть в wildfly console свойство, я перезапустил сервер, но я не могу сделать это.
Ответы
Ответ 1
Карта свойств по умолчанию
Глядя на http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
вы можете указать карту свойств по умолчанию в файле конфигурации. Это принимает следующую форму:
<Configuration status="debug">
<Properties>
<Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
</Properties>
...
<Appenders>
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}">
....
</Configuration
Затем, если вы запустите свое приложение с системным свойством -DoauthLoginLogPath=/path/oauth2.log
, значение File appender fileName
сначала будет просмотрено в системных свойствах, но если это не удастся, оно вернется к свойству, определенному в Properties
в верхней части файла конфигурации log4j2.xml.
Инлайн
Второй способ - предоставить значение по умолчанию inline:
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
Как правило, все поисковые запросы Log4j2 следуют этому шаблону: ${type:key:-defaultValue}
.
Env vs sys
Кстати, префикс env
предназначен для переменных среды (например,% PATH% для Windows) и не связан с sys
, который является свойствами системы Java. См. Также http://logging.apache.org/log4j/2.x/manual/lookups.html
Ответ 2
Вы можете использовать тот же синтаксис ${sys:propName:-default}
. Обратите внимание на ": -", он называется " переменной значения по умолчанию". Значение по умолчанию для "разделителя значений по умолчанию для переменных" равно :-
, как в bash и других * nix-оболочках.
Подробнее об этом можно узнать в документации Log4j 2 для класса StrSubstitutor.
Чтобы использовать тот же пример:
<Configuration status="debug">
...
<Appenders>
<Appender type="File" name="File"
fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
....
</Appenders>
</Configuration>