ansi colors - Logback: use colored output only when logging to a real terminal -
in logback configuration have following lines:
<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>
this makes warnings , errors show in terminal, colored, while main log file can contain more information, e.g. info , debug levels.
generally, works fine. but, when run emacs or other "not terminal" program, coloring commands show out ascii escape sequences, e.g. ^[[31m
warning highlighting. somehow possible make logback use ansi coloring when connected real terminal?
you have 2 problems here:
how detect if should use colors or not
this not trivial. this answer suggests use jni call isatty detect if you're connected terminal, it's lot of work low-priority feature.
how conditionally use colors in logback
that quite easy (official docs), remember need janino work:
<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"> <!-- use enable mode pass -dcolor jvm --> <if condition='isdefined("color")'> <then> <appender-ref ref="color"/> </then> <else> <appender-ref ref="nocolor"/> </else> </if> </root> </configuration>
Comments
Post a Comment