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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top