web-dev-qa-db-fra.com

Comment donner un chemin de 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 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?

38
Ankur Shanbhag

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.

49
Isaac

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"
34
Daniel Estrada

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

9
Shoham

Je travaille ça.

  1. Dans mon log4j.properties. J'ai précisé

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

  1. dans Eclipse - arguments JVM

-DLogFilePath = C:\work\MyLogFile.log

7
hmehandi

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

2

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");
}
0
Thiyag Mohan

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
KimiRai23