4

无法完全找到答案,任何人都可以提出解决方案。

我有一个我正在构建并使用 logback(logabck 1.2.3,jansi 1.16)和 groovy 的库 jar,我正在尝试对日志显示进行颜色编码 - 正如 Spring Boot 设法做到的那样 - 但我不想要春天作为我正在构建的这个库的依赖项启动。

我已将 jansi(logabck 文档中所述的 1.16)库作为对 gradle 构建的依赖项。

我的 logback.groovy 的相关部分看起来像这样

appender('STDOUT', ConsoleAppender) {
    withJansi = true
    encoder(PatternLayoutEncoder) {
        charset = Charset.forName('UTF-8')
        pattern = consolePatternFormat
    }
} 

当我运行测试时,我得到和错误(启用 jansi)像这样

16:17:42,344 |-WARN in com.softwood.logging.logback.AnsiConsoleAppender[STDOUT] - Failed to create WindowsAnsiOutputStream. Falling back on the default stream. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.fusesource.jansi.WindowsAnsiOutputStream
    at ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type org.fusesource.jansi.WindowsAnsiOutputStream
    at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:69)
    at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:40)
    at  at ch.qos.logback.core.ConsoleAppender.getTargetStreamForWindows(ConsoleAppender.java:88)
    at  at ch.qos.logback.core.ConsoleAppender.start(ConsoleAppender.java:79)
...
Caused by: java.lang.reflect.InvocationTargetException
    at  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at  at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:64)

这里有一个建议https://jira.qos.ch/browse/LOGBACK-762需要做的就是包装输出流,所以我像这样在我的项目中创建了一个自定义控制台附加程序

import java.io.OutputStream;
import org.fusesource.jansi.AnsiConsole;
import ch.qos.logback.core.ConsoleAppender;

public class AnsiConsoleAppender<E> extends ConsoleAppender<E> {

    @Override
    public void setOutputStream(OutputStream outputStream) {
        super.setOutputStream(AnsiConsole.wrapOutputStream(outputStream));
    }
}

并将 logback.groovy appender 修改为像这样使用 AnsiConsoleAppender

 appender('STDOUT', AnsiConsoleAppender) {
        withJansi = true
        encoder(PatternLayoutEncoder) {
            charset = Charset.forName('UTF-8')
            pattern = consolePatternFormat
        }
    }

但是,这与以前一样失败。如果我禁用 jansi 支持 - 一切都会如您所愿。当我启用 jansi 并运行测试时,这些会失败,如图所示

颜色记录与 springboot 一起工作,你会得到彩色控制台,所以有人知道如何做到这一点。但我不知道 logback 问题是什么

有没有人在windows下获得了logback(1.2.3)的基本jansi颜色编码?如果是这样,秘诀是什么。

现在我不得不禁用,但想让它工作。有点令人沮丧

4

2 回答 2

1

我通过删除 withJansi 解决了同样的问题

<!-- <withJansi>true</withJansi> -->
于 2018-07-14T15:55:45.990 回答
0

GOTO> TOMCAT 安装文件夹

您将在 TOMCAT_INSTALL_DIR/conf/logback.xml 内的 logback.xml 文件中找到此设置

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!--  <withJansi>${exo.logs.jansi.console:-false}</withJansi>-->
    <encoder>
      <pattern>${exo.logs.console.appender.pattern:-${exo.logs.default.pattern}}</pattern>
    </encoder>
  </appender>

清理tomcat并再次运行将明确解决您的问题。

于 2020-03-09T10:50:08.337 回答