2010-10-22 4 views
1

Existe-t-il un moyen de transmettre des données ou des paramètres à log4j avant de les charger, puis d'utiliser cette propriété dans le fichier de configuration.Transmettre les propriétés à log4j avant qu'elles ne se chargent

Je supposais il y a un système de propriétés que je pourrais utiliser:

log4j.appender.R.File =/usr/local/PFS/logs/$ {} ws.host /log4j.log

Où ws.host est la propriété que je veux utiliser. Mais comment puis-je définir cette valeur?

En outre, je suis dans un environnement Web. Comment puis-je savoir à quel point définir le paramètre de propriété avant le chargement de log4j?

+0

Parlez-vous de la définition à travers le code ou à travers un argument de la ligne de commande? – aperkins

+0

Je suis dans un environnement web. J'espérais pouvoir définir le paramètre log4j dans le code System.properties.put()? puis dans mon fichier log4j, définissez la configuration. –

Répondre

4

La propriété log4j PropertiesConfigurator par défaut prend en charge la substitution de variables.

Ainsi, vous pourriez passer des propriétés du système comme celui-ci "-DmyProject.logFile="/temp/test.log" à votre démarrage Java, puis dans les fichiers de propriétés ont "log4j.appender.R.File=${myProject.logFile}".

Si vous travaillez à partir d'un environnement Web, vous pouvez consulter le Log4jConfigListener de Spring. Il utilise un écouteur (Servlet API 2.4+) pour initialiser log4j avant les autres composants. Même si vous n'utilisez pas Spring, vous devriez pouvoir utiliser la source comme exemple pour créer facilement votre propre écouteur.

+0

Il peut être utile ici d'utiliser un nom de fichier de configuration log4j différent de celui de log4j.properties, puis d'appeler explicitement PropertyConfigurator après avoir défini log4j.configuration dans votre code. Cela vous donne un meilleur contrôle sur la séquence de configuration log4j. Cela nécessite que vous n'utilisiez aucun enregistreur avant - les variables finales statiques de type Logger sont également problématiques ici ... –

Questions connexes