ログバック構成には、次の行があります。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%highlight(...) %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
これにより、警告とエラーがターミナルに色付きで表示されますが、メインログファイルにはさらに多くの情報が含まれる可能性があります。 INFOおよびDEBUGレベル。
通常、これは問題なく機能します。しかし、Emacsやその他の「実際には端末ではない」プログラムから実行すると、カラーリングコマンドはASCIIエスケープシーケンス、例:^[[31m
警告の強調表示用。実際の端末に接続したときに、LogbackでANSIカラーリングのみを使用することはどういうわけか可能ですか?
ここには2つの問題があります。
これは些細なことではありません。 この回答 が示唆しているように、 isatty へのJNI呼び出しを使用して、端末に接続しているかどうかを検出できますが、優先度の低い機能には多くの作業が必要です。
これは実際には非常に簡単です( 公式ドキュメント )。これを機能させるには janino が必要であることを忘れないでください。
<configuration>
<appender name="COLOR" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%date] %highlight([%level]) [%logger{10} %file:%line] %msg%n</pattern>
<!-- ^^^^^^^^^^ -->
</encoder>
</appender>
<appender name="NOCOLOR" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%date] [%level] [%logger{10} %file:%line] %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<!-- to use enable this mode pass -Dcolor to jvm -->
<if condition='isDefined("color")'>
<then>
<appender-ref ref="COLOR"/>
</then>
<else>
<appender-ref ref="NOCOLOR"/>
</else>
</if>
</root>
</configuration>