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?

31
demandé sur rolve 2012-10-25 13:56:07

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.

44
répondu Isaac 2012-10-25 10:22:38

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"
25
répondu Daniel Estrada 2014-02-21 15:07:14

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

8
répondu Shoham 2016-03-27 12:19:35

j'ai eu ce travail.

  1. dans mon log4j.propriétés. J'ai spécifié

log4j.appender.fichier.File= $ {LogFilePath}

  1. dans les arguments eclipse - JVM

- DLogFilePath=C:\work\MyLogFile.journal

4
répondu hmehandi 2015-06-30 15:20:18

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

2
répondu Shirish Coolkarni 2014-05-21 16:07:32

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}
0
répondu tudorluchy 2012-10-25 10:12:38

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");
}
0
répondu Thiyag Mohan 2018-07-31 17:37:57

puisque vous utilisez unix, vous pouvez utiliser un chemin comme celui-ci.

  /home/Production/modulename/logs/message.log

le chemin doit commencer par /

-2
répondu Suranga 2012-10-25 10:05:13

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);
-2
répondu tudorluchy 2015-10-29 12:59:44