web-dev-qa-db-fra.com

Charger log4j.properties avec JAR

J'ai un fichier jar avec le manifeste suivant

Manifest-Version: 1.0  
Created-By: 1.7.0_07 (Oracle Corporation)  
Main-Class: test.Main  
Class-Path: ./log4j.properties lib/log4j-1.2.17.jar 

Je dirige la classe comme suit

Java -jar test.jar

Et voici mon dossier

lib
log4j.properties
test.jar

Pourquoi je ne vois pas le fichier de propriétés log4j? Voilà ce que je vois

log4j:WARN No appenders could be found for logger (test.Main).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.

Je vous remercie

SOLUTION: changé mon chemin de classe dans le MANIFEST en ceci

Class-Path: . lib/log4j-1.2.17.jar 
15
mottalrd

Vous pouvez également démarrer votre JVM avec l'argument:

-Dlog4j.configuration=file:"./your/properties/path/log4j.properties"

pour spécifier l'emplacement arbitraire de vos propriétés de journal externe. Je l'ai beaucoup utilisé dans un projet particulier.

14
Less

Le fichier de propriétés ne va pas dans le chemin de classe, vous devez le fournir et l'appeler à partir du code comme indiqué ici .

EDIT: Avec votre structure de répertoire, vous l'appelez comme ceci:

PropertyConfigurator.configure("log4j.properties");

EDIT2:

En outre, vous devez fournir un appender pour cela:

log4j.rootLogger=DEBUG, Appender1
log4j.logger.[logger-name]=level, Appender1
log4j.appender.Appender1=org.Apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.Apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

Si vous souhaitez un contrôle plus fin de la journalisation, supprimez la première ligne (root looger) et placez la seconde où, au lieu de [nom de l'enregistreur], vous placez le package le plus haut afin que toutes les classes à l'intérieur de ce package puissent utiliser la journalisation.

Vous pouvez définir plusieurs appenders et les affecter à différentes classes de cette manière.

10
linski

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) m'a fonctionné correctement, mais fondamentalement, vous devez placer le fichier de propriétés Log4j dans le dossier Code source (à côté de Java Class).

OU vous pouvez essayer de mettre à l'extérieur et donner le chemin d'accès approprié dans la méthode getResourceAsStream("resources/log4j.properties")

0
Ravi Macha