J'ai un log4j.xml
fichier de configuration. et un RollingFileAppender
auquel je dois fournir un chemin de fichier pour stocker les journaux. Le problème est que mon code sera déployé sur la machine Unix sous la forme d'un fichier jar exécutable. Donc si je passe un paramètre comme ceci:
value=logs/messages.log"
il crée un dossier nommé logs dans mon répertoire HOME et écrit tous les messages dans ce répertoire.
J'ai une variable environnementale définie à une certaine valeur. Je veux utiliser le chemin de cette variable et écrire des messages sous ce chemin. Comment puis-je y arriver?
J'ai essayé d'utiliser ceci:
value="${MY_HOME}/logs/message.log"
mais ça ne marche pas. Quelqu'un peut-il suggérer une solution à ce problème?
Lors de l'analyse de son fichier de configuration, l'expression ${MY_HOME}
sera étendu à la valeur de propriété système nommé MY_HOME
, pas le système variable d'environnement. Il y a une différence entre les deux.
Pour cela, vous devez ajouter quelque chose comme ceci à la ligne d’appel de la machine virtuelle Java:
-DMY_HOME=$MY_HOME
Cela définirait la propriété système Java MY_HOME
pour contenir la valeur de la variable d’environnement MY_HOME
.
vous POUVEZ lui donner des variables d'environnement. Pré-ajoutez simplement env: avant le nom de la variable, comme ceci:
value="${env:MY_HOME}/logs/message.log"
Cette syntaxe est documentée uniquement dans log4j 2.X, assurez-vous donc que vous utilisez la version correcte.
<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
Je travaille ça.
log4j.appender.file.File = $ {LogFilePath}
-DLogFilePath = C:\work\MyLogFile.log
Java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2"
_ ==> dans la ligne de commande si vous avez "valeur =" $ {ID_CHEMIN} /log/clientProject/project-error.log "en xml
Entrée Log4j
# - Fichier dans lequel se connecter et format de journal
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");
}
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}