11
votes

Comment faire log4j créer des fichiers journaux sur demande uniquement?

Nous avons une application modulaire où les modules ont leurs propres journaux log4J (i.e. journal de communication et journal d'erreur). Les appendeurs et les catégories de ceux-ci sont tous configurés dans le coeur log4j XML, mais tous les modules ne sont pas toujours installés. Le DailyRollingFileAppender crée son dossier indépendamment de l'utilisation et qui expose l'ensemble complet de modules, bien qu'elles ne soient pas présentes et que certaines d'entre elles soient spécifiques au client, nous souhaitons masquer les journaux non utilisés. Existe-t-il un moyen de faire du DailyRollingFileApender créer son fichier sur la première utilisation au lieu d'automatiquement au démarrage?


2 commentaires

Pourquoi n'exclutez-vous pas les blocs pour les composants désactivés dans le noyau XML?


Nous déployons la configuration de log4j, puis des modules peuvent être ajoutés plus tard. Lorsque nous laissons les détails log4J ouverts pour des modifications locales, nous avons du mal à modifier le fichier sur des installations ultérieures. Et oui, nous avons une exigence de niveau élevé d'automatisation d'installation.


4 Réponses :


4
votes

Les annexendeurs de fichiers n'ont aucune option pour créer paresseusement les fichiers journaux - la méthode setfile crée automatiquement le fichier si elle n'existe pas déjà: ostream = nouveau fichierOutPutStream (nom de fichier, annexe) ;

Vous devrez étendre l'appendeur et écraser le code d'initialisation du fichier vous-même pour obtenir le comportement que vous après.


1 commentaires

J'apprécie que cette réponse est quelque peu tardive, mais je me suis tout à fait de la lutte contre le log4J récemment pour laisser des questions suspendues :-)



6
votes

J'ai eu le même problème, j'ai donc étendu la classe Standard FileAppender et j'ai créé un nouveau LazyfileAppender qui est un fichier-filet qui initialise paresseusement le fichier journal (ne le crée que lorsque la première opération d'écriture se produit).

Le LazyfileAppender et d'autres ajouts à la bibliothèque Log4J standard peuvent être trouvés dans une bibliothèque simple que j'ai créée: log4J-ajouts .

Vous pouvez regarder la source pour développer votre propre extension ou vous pouvez l'utiliser comme ...


0 commentaires

0
votes

Étendre la classe Standard FileAppender a été infructueuse pour moi. J'ai donc trouvé une autre solution à l'aide des annexes par programme pour créer des fichiers journaux sur demande uniquement (et avec horodatage dans le fichier de noms). J'ai écrit ces deux méthodes: xxx

mon fichier log4j.properties ne configure que l'appendeur de la console. Lorsque je veux commencer la journalisation, j'appelle la méthode startlog (). Lorsque je veux vous connecter dans un autre fichier, j'appelle Stocklog () d'abord, puis startlog ().


0 commentaires

2
votes

Dans Log4J 2, le paramètre "Createondemand" est à la fois utilisé pour configurer le fichier journal uniquement lorsqu'un événement de journal est passé à l'appendeur.

Exemple: P>

<RollingFile name="LogFile" fileName="test.log" filePattern="test-%i.log.gz" createOnDemand="true">
    <Policies>
        <SizeBasedTriggeringPolicy size="1MB"/>
    </Policies>
    <DefaultRolloverStrategy max="5"/>
</RollingFile>


0 commentaires