Question

Est-il possible de spécifier le fuseau horaire LOG4J utilisera? J'ai besoin des dates dans le fichier journal à un fuseau horaire différent de celui de l'application. La PatternLayout de log4j utilise SimpleDateFormat. Malheureusement, il ne semble pas être un moyen de contrôler le fuseau horaire de SimpleDateFormat via la chaîne de motif (DateFormat méthode a setTimeZone mais cela ne permet pas).

Je regardais la source de log4j et SimpleDateFormat est en cours d'instiantiated dans PatternParser.finalizeConverter. Malheureusement, il n'y a pas un moyen facile d'obtenir une prise de DateFormat pour définir le fuseau horaire.

Était-ce utile?

La solution

Si vous utilisez le fichier extras Log4J JAR sur votre chemin de classe, la classe EnhancedPatternLayout prend en charge cette option de configuration. Voir la Javadoc ce lien . Elle est traitée dans le cadre du% d composant de motif comme suit:

log4j.appender.stdout.layout.ConversionPattern=%d{}{America/New_York} %p [%c] - %m%n

Vous pouvez télécharger le package extras .

Autres conseils

Mon cas ... doit changer le PatternLayout à EnhancedPatternLayout. (Log4j-1.2.17.jar)

log4j.appender.logfile.layout = org.apache.log4j. EnhancedPatternLayout log4j.appender.logfile.layout.ConversionPattern = [% d {} {ISO8601 GMT + 9}]% - 5p -% m% n

Le modèle de journal a surtout bonne idée, mais pas tout à fait correcte (vous ne recevez pas d'horodatage dans le journal).
Utilisez ce modèle pour vous:
%d{ISO8601}{America/New_York} %p [%c] - %m%n
ou
%d{ISO8601}{GMT-5} %p [%c] - %m%n

Il est préférable d'utiliser quelque chose comme {America /} plutôt que New_York {GMT-5} car en spécifiant un fuseau horaire à un ajustement automatique sera effectué si l'heure d'été est opérationnel. Spécification quelque chose comme GMT-5 ajustera simplement le fuseau horaire de GMT par la quantité d'heures.

Aussi, si vous whant à dinamicaly obtein le fuseau horaire par défaut, vous pouvez étendre EnhancedPatternLayout et remplacer la méthode « set ConversionPattern » comme ceci:

@Override
public void setConversionPattern(String conversionPattern) {
    String defaultTimeZoneId = TimeZone.getDefault().getID();
    String conversionPatternModif = conversionPattern.replaceAll(
        "\\%d\\{([^\\{\\}]*)\\}([ ]*[^\\{]*)", 
        "%d{$1}{"+defaultTimeZoneId+"}$2");

    super.setConversionPattern(conversionPatternModif);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top