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

Как указать путь переменной окружения для файла appender в файле конфигурации в log4j

У меня есть файл конфигурации log4j.xml. и RollingFileAppender, которым мне необходимо предоставить путь к файлу для хранения журналов. Проблема заключается в том, что мой код будет развернут на Unix-машине как запущенная банка. Поэтому, если я передаю параметр примерно так:

value=logs/messages.log"

он создает папку с именем logs внутри моего каталога HOME и записывает все сообщения в файл внутри этого каталога.

У меня есть переменная окружения, установленная для некоторого значения. Я хочу использовать путь к этой переменной и писать сообщения по этому пути. Как я могу это достичь?

Я попытался использовать это:

value="${MY_HOME}/logs/message.log"

но это не работает. Может ли кто-нибудь предложить решение этой проблемы?

4b9b3361

Ответ 1

При анализе его файла конфигурации выражение ${MY_HOME} будет расширено до значения системного свойства с именем MY_HOME, а не переменной системной среды. Там разница между ними.

Чтобы добиться этого чистым способом, вам нужно добавить что-то подобное в строку вызова JVM:

-DMY_HOME=$MY_HOME

Это определило бы системное свойство Java MY_HOME для хранения значения переменной среды MY_HOME.

Ответ 2

вы можете указать переменные среды. Просто запустите env: перед именем переменной, например:

value="${env:MY_HOME}/logs/message.log"

Ответ 3

Этот синтаксис документируется только в log4j 2.X, поэтому убедитесь, что вы используете правильную версию.

    <Appenders>
    <File name="file" fileName="${env:LOG_PATH}">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
        </PatternLayout>
    </File>
</Appenders>

http://logging.apache.org/log4j/2.x/manual/lookups.html#EnvironmentLookup

Ответ 4

java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2" == > в строке cmd, если у вас есть значение "value =" ${LOG_DIR}/log/clientProject/project-error.log "в xml

Ответ 5

Я получил эту работу.

  • В моем log4j.properties. Я указал

log4j.appender.file.File = ${LogFilePath}

  1. в eclipse - аргументы JVM

-DLogFilePath = C:\работа\MyLogFile.log

Ответ 6

Возможно...:

datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
layout=%d{${datestamp}} ms=%-4r [%t] %-5p %l %n%m %n%n

# infoFile 
log4j.appender.infoFile=org.apache.log4j.RollingFileAppender
log4j.appender.infoFile.File=${MY_HOME}/logs/message.log
log4j.appender.infoFile.layout=org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern=${layout}

Ответ 7

Поскольку вы используете unix, вы можете использовать такой путь.

  /home/Production/modulename/logs/message.log

путь должен начинаться с/

Ответ 8

Чтобы динамически изменить переменную, вы можете сделать что-то вроде этого:

String value = System.getenv("MY_HOME");
Properties prop = new Properties("log4j.properties"); 
prop.put("MY_HOME", value); // overwrite with value from environment
PropertyConfigurator.configure(prop);