J'essaie d'exécuter un fichier jar avec le fichier log4j.xml sur le système de fichiers en dehors du fichier jar comme suit:
Java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2
J'ai aussi essayé:
Java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2
Le fichier log4j.xml est dans le même répertoire que le fichier jar (/ opt/companyName/pathToJar /), mais je reçois toujours le message d'avertissement standard:
log4j:WARN No appenders could be found for logger (org.Apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
Est-il possible d'avoir le fichier de configuration en dehors du fichier jar ou dois-je le conditionner avec le fichier jar?
TIA
Lorsque vous utilisez le commutateur -jar
pour lancer un fichier jar exécutable, le chemin d'accès aux classes est obtenu à partir du manifeste du fichier jar. Le commutateur -cp
, s'il est spécifié, est ignoré.
La réponse de Jeff Storey va être la solution la plus simple. Vous pouvez également ajouter un attribut Class-Path
au manifeste du fichier jar.
EDIT Essayez d'activer le débogage de log4j et de transformer le chemin d'accès à log4j.xml
en une adresse URL complète. Par exemple:
Java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ...
cela marche:
Java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar
Pour log4j2, utilisez l’option configurationFile:
Java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ...
http://logging.Apache.org/log4j/2.0/manual/configuration.html
Avez-vous essayé Java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>
vous pouvez définir un fichier de propriétés par défaut dans le fichier jar. Si aucune propriété personnalisée n'est définie, vous pouvez utiliser ce fichier par défaut. Si une propriété personnalisée est définie, vous pouvez remplacer la propriété par défaut.
le fichier myjar.jar contient log4j.default.configuration
vous pouvez exécuter votre programme avec ces paramètres pour démarrer votre application
Java -jar -Dlog4j.configuration=log4j.properties target\yourfile-v01_000_01_c002.jar
Exemple de code
public static void main(String[] args) {
String filename = System.getProperty("log4j.configuration");
if(null==filename||filename.trim().equals("")) {
logger.info("Using default log4j configuration log4j.default.properties.");
logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>");
PropertyConfigurator.configure( Main.class.getResourceAsStream("/log4j.default.properties"));
} else {
File file = new File(filename);
if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath());
else PropertyConfigurator.configure(file.getAbsolutePath());
}
}
J'ai eu des problèmes d'utilisation de log4j avec le JDK et de la configuration automatique de Sun.
Vous pouvez utiliser ceci:
String filename = System.getProperty("log4j.configuration");
DOMConfigurator(filename);
avant d’utiliser Logger.
Java -cp "chemin/vers/votre/log4jxml: chemin/vers/votre/jjar.jar" votre.package.MainClass
Le fichier log4j.xml du répertoire "chemin/vers/votre/log4jxml" remplacera le fichier log4j.xml dans "chemin/vers/votre/jjar.jar".
Veuillez vous référer à Définition de plusieurs fichiers JAR dans le chemin de classe Java .
La configuration de chemin la plus simple pour `` log4j2is using the
static blocksetting
log4j.configurationFile`:
public class MyClass {
static {
System.setProperty("log4j.configurationFile", "./config/log4j2.xml");
}
protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class);
public static void main(String[] args) {
logger.info("");
}
}
Ensuite, la structure pourrait être comme:
ProgramFolder
| ---- /config/log4j2.xml
| ---- MyClass.jar
Lorsque vous exécutez votre fichier jar, le fichier XML se trouve à l’extérieur du fichier.
"-jar" utilise uniquement le chemin de classe à l'intérieur du fichier jar exécutable, et -cp est ignoré. Ajouter "." Le chemin d'accès aux classes dans l'exécutable jar doit permettre à log4j.xml d'être décomposé.