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

我有一个正在构建和使用logback(logabck 1.2.3,jansi 1.16)和groovy的库jar,并且我正在尝试对日志显示进行颜色编码-因为Spring Boot可以做到-但我不希望Spring引导作为我正在构建的该库的依赖项。

我已经将jansi(logabck docs中所述为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附加器以使用AnsiConsoleAppender这样
 appender('STDOUT', AnsiConsoleAppender) {
        withJansi = true
        encoder(PatternLayoutEncoder) {
            charset = Charset.forName('UTF-8')
            pattern = consolePatternFormat
        }
    }

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

颜色记录与springboot一起使用,您会获得彩色控制台,因此有人知道如何执行此操作。但是我不知道什么是logback问题

有没有人在Windows下可以使用基本的jansi颜色编码进行登录(1.2.3)?如果是这样, secret 是什么。

目前,我不得不禁用它,但想使其正常工作。有点令人沮丧

最佳答案

我通过与Jansi删除来解决了相同的问题

<!-- <withJansi>true</withJansi> -->

08-17 05:04