Configuration de RollingFileAppender dans log4j

Je travaille sur un ensemble de services Web et nous aimerions avoir un journal de rotation quotidien.

J’essaie de faire fonctionner org.apache.log4j.rolling.RollingFileAppender partir du compagnon log4j extras, car la documentation suggère que c’est le meilleur pour les environnements de production.

J’ai à la fois la bibliothèque principale log4J ( log4j-1.2.15.jar ) et la bibliothèque log4j extras ( apache-log4j-extras-1.1.jar ) sur le apache-log4j-extras-1.1.jar .

J’ai la configuration suivante pour l’appender dans le fichier log4j.properties :

 ### SOAP Request Appender log4j.appender.request=org.apache.log4j.rolling.RollingFileAppender log4j.appender.request.File=SOAPmessages.log log4j.appender.request.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.request.RollingPolicy.ActiveFileName =SOAPmessages-%d.log log4j.appender.request.RollingPolicy.FileNamePattern=SOAPmessages-%d.log.zip log4j.appender.request.layout = org.apache.log4j.PatternLayout log4j.appender.request.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

Cependant, lorsque je lance le service Web avec log4j en mode débogage, je reçois ces messages d’erreur:

 log4j: Parsing appender named "request". log4j: Parsing layout options for "request". log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p %c{1}:%L - %m%n]. log4j: End of parsing for "request". log4j: Setting property [file] to [/logs/SOAPmessages.log]. log4j:WARN Failed to set property [rollingPolicy] to value "org.apache.log4j.rolling.TimeBasedRollingPolicy". log4j:WARN Please set a rolling policy for the RollingFileAppender named 'request' log4j: Parsed "request" options. 

J’ai trouvé de la documentation sur la façon de configurer cet appender un peu peu, alors quelqu’un peut-il m’aider à corriger ma configuration?

EDIT0: Ajout de la sortie du mode de débogage, plutôt que des avertissements standard

Selon Log4jXmlFormat, vous ne pouvez pas le configurer avec log4j.properties, mais uniquement avec le format de configuration XML:

Notez que TimeBasedRollingPolicy ne peut être configuré qu’avec xml, pas log4j.properties

Malheureusement, l’exemple log4j.xml qu’ils fournissent ne fonctionne pas non plus:

 log4j:ERROR Parsing error on line 14 and column 76 log4j:ERROR Element type "rollingPolicy" must be declared. ... log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE' 

J’ai eu un problème similaire et juste trouvé un moyen de le résoudre (par simple passage à travers la source log4j-extras , pas moins …)

Les bonnes nouvelles sont que, contrairement à ce qui est écrit partout, il s’avère que vous pouvez réellement configurer TimeBasedRollingPolicy en utilisant log4j.properties (configuration XML non nécessaire! Au moins dans les versions de log4j> 1.2.16 voir ce rapport de bogue )

Voici un exemple:

 log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log 

BTW le bit ${instanceId} est quelque chose que j’utilise sur Amazon EC2 pour distinguer les journaux de tous mes employés – je dois juste définir cette propriété avant d’appeler PropertyConfigurator.configure() , comme suit:

 p.setProperty("instanceId", EC2Util.getMyInstanceId()); PropertyConfigurator.configure(p); 

Face à plus de problèmes lors de la réalisation de ce travail. Voici les détails:

  1. Pour télécharger et append apache-log4j-extras-1.1.jar dans le classpath, vous ne l’ apache-log4j-extras-1.1.jar pas remarqué au début.
  2. Le RollingFileAppender devrait être org.apache.log4j.rolling.RollingFileAppender au lieu de org.apache.log4j.RollingFileAppender . Cela peut donner l’erreur suivante: log4j:ERROR No output stream or file set for the appender named [file].
  3. Nous avons dû mettre à jour la bibliothèque log4j de log4j-1.2.14.jar à log4j-1.2.16.jar .

Voici la configuration de l’appender qui a fonctionné pour moi:

            

Toolbear74 a raison log4j.XML est requirejs. Pour que le XML valide les balises doit être AVANT le je suggère de définir un seuil de consignation

Lorsque vous créez un fichier Log4j.xml, n’oubliez pas de copier log4j.dtd au même endroit.

Voici un exemple:

                    

Étant donné que vous définissez un FileNamePattern et un ActiveFileName je pense que la définition d’une propriété File est redondante et peut-être même erronée.

Essayez de renommer votre log4j.properties et déposez-le dans un log4j.xml similaire à mon exemple et voyez ce qui se passe.

En ce qui concerne l’erreur: log4j:ERROR Element type "rollingPolicy" must be declared

  1. Utilisez une version log4j.jar plus récente que le fichier log4j-1.2.14.jar, qui contient un log4j.dtd définissant rollingPolicy .
  2. bien sûr, vous avez aussi besoin de apache-log4j-extras-1.1.jar
  3. Vérifiez si d’autres bocaux tiers que vous utilisez ont peut-être une ancienne version de log4j.jar emballée à l’intérieur. Si c’est le cas, assurez-vous que votre fichier log4j.jar figure en tête de la liste avant le tiers contenant l’ancien fichier log4j.jar.

Dans Log4j2, la lib “extras” n’est plus obligatoire. Le format de configuration a également changé.

Un exemple est fourni dans la documentation Apache

 property.filename = /foo/bar/test.log appender.rolling.type = RollingFile appender.rolling.name = RollingFile appender.rolling.fileName = ${filename} appender.rolling.filePattern = /foo/bar/rolling/test1-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 2 appender.rolling.policies.time.modulate = true appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size=100MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 5 logger.rolling.name = com.example.my.class logger.rolling.level = debug logger.rolling.additivity = false logger.rolling.appenderRef.rolling.ref = RollingFile 

Je me méfie de la propriété ActiveFileName . D’après le javadoc log4j, il n’y a pas une telle propriété sur la classe TimeBasedRollingPolicy . (Aucune setActiveFileName ou getActiveFileName .)

Je ne sais pas ce que spécifierait une propriété inconnue, mais il est possible que l’object contenant soit abandonné, ce qui pourrait entraîner les avertissements que vous avez vus.

Essayez de le laisser de côté et de voir ce qui se passe.

Vous avez un nom de paquet incorrect

 org.apache.log4j.rolling.RollingFileAppender 

Le bon est:

 org.apache.log4j.RollingFileAppender