web-dev-qa-db-fra.com

Assurez-Logback inclure le "T" entre la date et l'heure dans son format "% date" pour une stricte conformité ISO 8601

Par défaut, l'encodeur Logback utilise un format de date similaire à la norme ISO 8601 . Mais il manque le "T" au milieu entre les portions de date et d'heure. T facilite l'analyse et est requis par la norme (sauf si les parties privées en conviennent autrement).

Y a-t-il une astuce pour obtenir Logback pour inclure le T?

Ce…

2006-10-20T14:06:49,812

au lieu de cela…

2006-10-20 14:06:49,812

Je suppose que je pourrais recréer le format entier tout en ajoutant un "T", mais je me demande s'il existe un moyen plus simple.

22
Basil Bourque

Rapport d'erreur

Il y a un rapport de bogue à ce sujet sur page JIRA de Logback . Il n'y a pas eu beaucoup de développement depuis 24/Feb/10 3:57 PM. Je viens de voter pour attirer l'attention. Tu devrais aussi.

Je fournirais mon propre format de date qui correspond à ISO 8601 .

Insérer "T"

Cela devrait faire l'affaire:

<pattern>%d{"yyyy-MM-dd'T'HH:mm:ss,SSS"} [%thread] %-5level %logger{35} - %msg %n
</pattern>

Les "" Sont nécessaires pour faire fonctionner le , Comme décrit dans la documentation .

Cet élément <pattern> Appartient à votre paramètre de configuration Logback. Voici un exemple de fichier logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- Strangely, Logback lacks a built-in formatter for ISO 8601. So, roll our own.  -->
            <Pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <logger name="com.example" level="TRACE"/>


    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

Fuseau horaire

Pour être plus entièrement conforme à la norme ISO 8601 et pour une journalisation plus utile, vous devez inclure un fuseau horaire.

EDIT (Michael-O, 2014-06-15): C'est pas vrai, le fuseau horaire est absolument facultatif.

Pour inclure un fuseau horaire, passez un deuxième argument ( voir doc ) au %date. Passez le nom propre d'un fuseau horaire . Évitez les codes de fuseau horaire à trois ou quatre lettres tels que "EST" car ils ne sont ni uniques ni normalisés. Par exemple, passez Australia/Perth. Généralement, pour la journalisation, nous voulons UTC (GMT), c'est-à-dire sans aucun décalage. Dans ce cas, passez UTC.

Vous pouvez afficher le décalage de fuseau horaire en nombre d'heures et de minutes dans le cadre de la date-heure dans le journal. Ajoutez un X pour afficher le décalage de fuseau horaire dans le cadre de la valeur date/heure.

Ce…

%date{"yyyy-MM-dd'T'HH:mm:ss,SSSXXX", UTC}

… Produit…

2014-04-16T09:59:24,009Z

XXX fonctionne dans Java 7 et 8. Dans les versions antérieures de Java, vous pouvez peut-être utiliser un Z dans la définition de format pour générer un décalage nombre qui manque de deux points.

46