Chargez java.util.logging.config.file pour l'initialisation par défaut
-
03-07-2019 - |
Question
J'essaie de charger un fichier log.properties
personnalisé au démarrage de mon application.
Mon fichier de propriétés est dans le même package que ma classe principale. J'ai donc supposé que le paramètre de ligne de commande -Djava.util.logging.config.file = log.properties
devrait obtenir le fichier de propriétés. chargé.
Mais les propriétés ne sont chargées que lorsque je spécifie un chemin absolu complet vers le fichier de propriétés. Des suggestions sur l'utilisation d'un chemin relatif?
La solution
La journalisation Java ne recherche pas un fichier sur l’ensemble du disque dur; il existe des règles très simples pour la recherche de fichiers. Vous voulez que Java voie que les deux fichiers s’appartiennent mais vous ne l’avez dit nulle part. Étant donné que Java ne voit aucune connexion entre le fichier de propriétés et votre classe, mis à part le fait qu'ils se trouvent dans le même dossier sur votre disque, il ne trouve pas le fichier.
-Djava.util.logging.config.file = log.properties
ne fonctionne que si le fichier log.properties
se trouve dans le répertoire en cours du processus Java (qui peut être assez aléatoire). Vous devez donc utiliser un chemin absolu ici.
Une autre solution consisterait à déplacer le fichier logging.properties
dans $ JAVA_HOME / lib /
(ou à modifier le fichier qui devrait s'y trouver). Dans ce cas, vous n'avez pas besoin de définir une propriété système.
Autres conseils
Vous pouvez très facilement charger dynamiquement des fichiers de propriétés java.util.logging
à partir d'un chemin relatif. C’est ce que j’ai placé dans un bloc static {}
dans ma classe Main
. Placez votre fichier logging.properties
dans le package par défaut
et vous pourrez y accéder très facilement avec le code suivant.
final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
Logger.getAnonymousLogger().severe(e.getMessage());
}
util logging ne se charge pas à partir de classpath, il a besoin d’un chemin absolu. C’est pourquoi d’autres progiciels de journalisation tels que log4j sont beaucoup plus faciles à configurer et mieux pour les applications Web où il est difficile d’obtenir des chemins abs.
cela n’est pas du tout expliqué dans le doco java.util.logging.LogManager.