Как указать путь переменной окружения для файла appender в файле конфигурации в log4j
У меня есть файл конфигурации log4j.xml
. и RollingFileAppender
, которым мне необходимо предоставить путь к файлу для хранения журналов. Проблема заключается в том, что мой код будет развернут на Unix-машине как запущенная банка. Поэтому, если я передаю параметр примерно так:
value=logs/messages.log"
он создает папку с именем logs внутри моего каталога HOME и записывает все сообщения в файл внутри этого каталога.
У меня есть переменная окружения, установленная для некоторого значения. Я хочу использовать путь к этой переменной и писать сообщения по этому пути. Как я могу это достичь?
Я попытался использовать это:
value="${MY_HOME}/logs/message.log"
но это не работает. Может ли кто-нибудь предложить решение этой проблемы?
Ответы
Ответ 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}
- в 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);