无法完全找到答案,任何人都可以提出解决方案。
我有一个我正在构建并使用 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颜色编码?如果是这样,秘诀是什么。
现在我不得不禁用,但想让它工作。有点令人沮丧