Comment donner le chemin de la variable d'environnement pour le fichier appender dans le fichier de configuration dans log4j
j'ai un log4j.xml
fichier de configuration. et un RollingFileAppender
vers lequel je dois fournir le chemin du fichier pour stocker les journaux. Le problème est que mon code sera déployé sur la machine Unix comme un jar exécutable. Donc si je passe le paramètre quelque chose comme ceci:
value=logs/messages.log"
il crée des logs de dossiers nommés à l'intérieur de mon répertoire D'origine et écrit tous les messages à l'intérieur de ce répertoire.
j'ai une variable d'environnement définie à une certaine valeur. Je veux utiliser le chemin de cette variable et écrire des messages en vertu de ce chemin. Comment puis-je l'atteindre?
j'avais essayé d'utiliser ceci:
value="${MY_HOME}/logs/message.log"
mais ça ne marche pas. Quelqu'un peut-il suggérer une solution pour ce problème?
9 réponses
Lors de l'analyse de son fichier de configuration, l'expression ${MY_HOME}
sera étendu à la valeur de propriété du systèmeMY_HOME
, le variable d'environnement. Il y a une différence entre les deux.
pour réaliser ceci d'une manière propre, vous devrez ajouter quelque chose comme ceci à la ligne d'invocation JVM:
-DMY_HOME=$MY_HOME
qui définirait la propriété du système Java MY_HOME
pour contenir la valeur de la la variable d'environnement MY_HOME
.
Vous pouvez lui donner des variables d'environnement. Juste preppend env: avant le nom de la variable, comme ceci:
value="${env:MY_HOME}/logs/message.log"
cette syntaxe n'est documentée que dans log4j 2.X assurez-vous donc que vous utilisez la bonne version.
<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
j'ai eu ce travail.
- dans mon log4j.propriétés. J'ai spécifié
log4j.appender.fichier.File= $ {LogFilePath}
- dans les arguments eclipse - JVM
- DLogFilePath=C:\work\MyLogFile.journal
java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2"
= = > dans la ligne cmd si vous avez "value=" ${LOG_DIR} / log / clientProject / project-error.journal" en xml
Peut-être... :
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 entrée
# Fichier de log et log format
log4j.appender.fichier.File= $ {LOG_PATH} / mylogfile.journal
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");
}
puisque vous utilisez unix, vous pouvez utiliser un chemin comme celui-ci.
/home/Production/modulename/logs/message.log
le chemin doit commencer par /
changez dynamiquement une variable vous pouvez faire quelque chose comme ceci:
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);