我有一个log4j.xml
配置文件。和RollingFileAppender
我需要提供存储日志的文件路径。问题是我的代码将作为可运行的jar部署在Unix机器上。所以,如果我传递这样的参数:
value=logs/messages.log"
它在我的HOME目录中创建名为logs的文件夹,并将所有消息写入此目录中的文件。
我将环境变量设置为某个值。我想使用该变量的路径并在该路径下写入消息。我怎样才能实现它?
我曾尝试过这个:
value="${MY_HOME}/logs/message.log"
但这不起作用。有谁能建议解决这个问题?
答案 0 :(得分:48)
解析其配置文件时,表达式${MY_HOME}
将扩展为名为MY_HOME
的系统属性的值,而不是系统环境变量。这两者之间存在差异。
要以干净的方式实现这一点,您必须向JVM调用行添加类似的内容:
-DMY_HOME=$MY_HOME
这将定义Java系统属性MY_HOME
以包含环境变量MY_HOME
的值。
答案 1 :(得分:34)
你可以给它环境变量。只需在变量名称前加上env:就像这样:
value="${env:MY_HOME}/logs/message.log"
答案 2 :(得分:8)
此语法仅在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
答案 3 :(得分:5)
我得到了这个工作。
log4j.appender.file.File = $ {LOGFILEPATH}
-DLogFilePath = C:\工作\ MyLogFile.log
答案 4 :(得分:2)
java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2"
==&gt;如果在xml中有“value =”$ {LOG_DIR} /log/clientProject/project-error.log“,请在cmd行中
答案 5 :(得分:0)
也许......:
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}
答案 6 :(得分:0)
Log4j条目
#-要记录的文件和记录格式
log4j.appender.file.File = $ {LOG_PATH} /mylogfile.log
Java program
String log4jConfPath = "path/log4j.properties";
File log4jFile = new File(log4jConfPath);
if (log4jFile.exists()) {
System.setProperty("LOG_PATH", "c:/temp/");
PropertyConfigurator.configure(log4jFile.getAbsolutePath());
logger.trace("test123");
}
答案 7 :(得分:-2)
由于您使用的是unix,因此可以使用这样的路径。
/home/Production/modulename/logs/message.log
路径应以/
开头答案 8 :(得分:-2)
要动态更改变量,您可以执行以下操作:
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);