Comment configurer log4j avec un fichier de propriétés
Comment puis-je obtenir log4j pour ramasser un fichier de propriétés.
Je suis en train d'écrire un Java de l'application bureau à qui je veux utiliser log4j. Dans ma méthode principale si vous avez ceci:
PropertyConfigurator.configure("log4j.properties");
La log4j.les propriétés de fichier se trouve dans le même répertoire quand j'ai ouvert le Bocal.
Encore, j'obtiens cette erreur:
log4j:ERREUR: impossible de lire
fichier de configuration [log4j.propriétés].
java.io.FileNotFoundException:
log4j.propriétés (Le système ne peut pas
trouver le fichier spécifié)
Ce que je fais mal?
- Le log4j.les propriétés de fichier doit être dans le dossier racine de votre application principale (puisque vous êtes en train de rédiger une application de bureau).
Vous devez vous connecter pour publier un commentaire.
Je crois que la méthode configure () s'attend à un chemin d'accès absolu. De toute façon, vous pouvez également essayer de charger une des Propriétés de l'objet premier:
Si le fichier de propriétés est dans le pot, alors vous pourriez faire quelque chose comme ceci:
Ci-dessus suppose que le log4j.les propriétés dans le dossier racine du fichier jar.
Lorsque vous utilisez PropertyConfigurator.configurer(Chaîne configFilename),
ils sont la suite de l'opération dans la bibliothèque log4j.
Elle échoue dans la lecture, car il cherche "Log4j.propriétés" dans le répertoire courant dans lequel l'application est exécutée.
Comment à propos de la façon dont il modifie la lecture de la première partie de la propriété de fichier comme suit, et met "log4j.les propriétés" sur le répertoire dans lequel la classe est définie.
Une autre méthode de mettre la "Log4j.les propriétés" dans le fichier jar existe.
juste set-Dlog4j.configuration=fichier:log4j.propriétés travaillé pour moi.
log4j, puis se penche pour la fichier log4j.propriétés dans le répertoire de travail actuel de l'application.
Rappelez-vous que log4j.la configuration est un URL spécification, il faut donc ajouter "fichier:" en face de votre log4j.les propriétés de nom de fichier si vous voulez faire référence à un fichier sur le système de fichiers, c'est à dire un fichier pas sur le chemin de la classe!
Au départ, j'ai spécifié -Dlog4j.configuration=log4j.les propriétés. Toutefois, cela ne fonctionne que si log4j.propriétés est sur le chemin de la classe. Lorsque j'ai copié log4j.propriétés à main/resources dans mon projet et de reconstruction qu'il a été copié dans le répertoire cible (projet maven) cela a fonctionné aussi bien (ou vous pouvez emballer vos log4j.les propriétés de votre projet les pots, mais qui ne serait pas permettre à l'utilisateur de modifier l'enregistreur de données de configuration!).
C'est une modification de la réponse de @kgiannakakis:
Le code d'origine est mauvais, car il ne permet pas de fermer correctement le InputStream après
Properties.load(InputStream)
est appelé. À partir de la documentation Javadoc:The specified stream remains open after this method returns.
================================
Je crois que la méthode configure () s'attend à un chemin d'accès absolu. De toute façon, vous pouvez également essayer de charger une des Propriétés de l'objet premier:
Si le fichier de propriétés est dans le pot, alors vous pourriez faire quelque chose comme ceci:
Ci-dessus suppose que le log4j.les propriétés dans le dossier racine du fichier jar.
J'ai ce code dans ma demande aujourd'hui
Le chemin d'accès relatif est à partir du répertoire de travail de la JVM (où la JVM commence).
Je crois que le log4j.propriétés du répertoire, il doit être dans le chemin de classe java. Dans votre cas, l'ajout de la MDC au classpath devrait travail.
Depuis JVM arguments sont par la suite transférées à votre programme java sous la forme de variables système, vous pouvez utiliser ce code au début de l'exécution de votre point de modifier la propriété et ont log4j lire la propriété que vous venez de définir dans les propriétés système
Vous pouvez activer log4j interne à l'exploitation forestière de la définition de la " log4j.debug variable.