MDC ログ パターンに空の値が出力されないように、logback の置換機能を使用しようとしています。 http://logback.qos.ch/manual/layouts.html#replace
私はここから例に従おうとしています http://login.blogspot.com/2013/04/logback-mdc-and-empty-values.html
いくつかの背景
90% の時間で、ログ パターンが出力されます
2014-08-28 11:30:27,014 emp:Peter org:IT Expense submitted
印刷される時間の 5%
2014-08-28 11:30:27,014 emp: org: Cleanup jobs.
これは、後者の場合、MDC で emp と org を指定する必要がないためです。これらの場合、emp: と org: がログ行にまったく存在しないようにします。
望ましい
2014-08-28 11:30:27,014 Cleanup jobs.
置換による可能な解決策
これが私の変数と私が使用しているアペンダーです。mdcPattern は、emp 値と org 値がない場合、空の文字列に解決されるという考えです。
<variable scope="context" name="mdcPattern" value="%replace( emp:%X{empName} org:%X{orgName} ) {'[a-z]+:( |$)', ''}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d ${mdcPattern} %thread %-5level %logger{25} - %msg%n</pattern>
</encoder>
</appender>
ただし、正規表現の置換は機能しません。ログ行は次のように表示されます。
2014-08-28 11:30:27,014 emp: org: {'[a-z]+:( |$
私の正規表現は少し弱いです。ログ行に置換パターンがそのまま表示される理由がわかりません。どんな助けでも大歓迎です。