web-dev-qa-db-ja.com

ISO 8601に厳密に準拠するため、Logbackに「%date」形式で日付と時刻の間に「T」を含めます

デフォルトでは、 Logback エンコーダーは ISO 8601 標準と同様に 日付形式 を使用します。しかし、日付と時刻の中間にある「T」が欠けています。 Tを使用すると、解析が容易になり、標準で必要になります(プライベートパーティが別の方法で同意しない限り)。

LogbackにTを含めるためのトリックはありますか?

この…

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

これの代わりに…

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

「T」を追加しながらフォーマット全体を再作成できると思いますが、もっと簡単な方法があるのだろうかと思います。

22
Basil Bourque

バグレポート

これに関するバグレポートが LogbackのJIRAページ にあります。 24/Feb/10 3:57 PM以来、開発はそれほど進んでいません。注目を集めるために投票しました。あなたもすべき。

ISO 8601 に一致する独自の日付形式を提供します。

「T」を挿入

これでうまくいくはずです:

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

ドキュメント で説明されているように""を機能させるには、,が必要です。

その<pattern>要素は、Logback構成設定に属しています。 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>

タイムゾーン

ISO 8601に完全に準拠し、より役立つロギングを行うには、タイムゾーンを含める必要があります。

編集(Michael-O、2014年6月15日):つまり、nottrueであり、タイムゾーンは絶対的なオプションです。

タイムゾーンを含めるには、2番目の引数( ドキュメントを参照 )を%dateに渡します。 タイムゾーンの適切な名前 を渡します。 「EST」などの3文字または4文字のタイムゾーンコードは、一意でも標準でもないので避けてください。たとえば、Australia/Perthを渡します。通常、ロギングには [〜#〜] utc [〜#〜] (GMT)時間を使用します。つまり、オフセットなしです。その場合、UTCを渡します。

時間帯のオフセットを日時の一部として時間と分の数としてログに表示できます。 Xを追加して、タイムゾーンオフセットを日時値の一部として表示します。

この…

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

…プロデュース…

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

XXXはJava 7および8で機能します。以前のバージョンのJavaでは、フォーマット定義でZを使用してオフセットを生成できます。コロンがない数。

46