我有一个log4j.xml
配置文件。 和RollingFileAppender
,而我需要存储日志提供文件路径。 问题是我的代码将Unix机器上部署为一个可运行的罐子。 所以,如果我传递的参数是这样的:
value=logs/messages.log"
它创建的文件夹命名日志我的家目录中,并写入所有消息记录到该目录中的文件。
我有一个环境变量设置为某个值。 我想该路径下使用该变量的路径和写邮件。 我怎样才能实现呢?
使用这个我试过:
value="${MY_HOME}/logs/message.log"
但是,这并不工作。 任何人都可以提出这个问题的解决方案?
当解析它的配置文件,表达式${MY_HOME}
将扩大到系统属性命名的值MY_HOME
,而不是系统环境变量 。 还有的两者之间的差异。
要在干净的方式做到这一点,你必须像这样添加到JVM调用行:
-DMY_HOME=$MY_HOME
这将定义Java系统属性MY_HOME
包含环境变量的值MY_HOME
。
你可以给它的环境变量。 只是preppend ENV:变量名之前,这样的:
value="${env:MY_HOME}/logs/message.log"
此语法记录只在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
我得到这个工作。
- 在我的log4j.properties。 我指定
log4j.appender.file.File = $ {} LOGFILEPATH
- 在日食 - JVM参数
-DLogFilePath = C:\工作\ MyLogFile.log
java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2"
==>在CMD行,如果你有“XML中值=” $ {} LOG_DIR /log/clientProject/project-error.log”
也许... :
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}
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");
}
由于使用的是Unix,你可以使用这样的路径。
/home/Production/modulename/logs/message.log
路径应该开始/
动态地改变一个变量 ,你可以这样做:
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);
文章来源: How to give environmental variable path for file appender in configuration file in log4j