Подтвердить что ты не робот

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

4b9b3361

Ответ 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>