找不到这个问题的答案,任何人都可以提出修复方案。
我正在构建和使用 logback (logabck 1.2.3,jansi 1.16)和 groovy 的库 jar,并且我正在尝试对日志显示进行颜色编码 - 正如 Spring Boot 设法做到的那样 - 但我不想spring boot 作为我正在构建的这个库的依赖项。
我已将 jansi(1.16,如 logabck 文档中所述)库作为 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 下获得了 logback (1.2.3) 的基本 jansi 颜色编码吗?如果是的话,秘密是什么。
目前我不得不禁用它,但想让它发挥作用。有点沮丧
我通过 REMOVING withJansi 解决了同样的问题
<!-- <withJansi>true</withJansi> -->
转到> 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并再次运行将明确解决您的问题。
真正解决了本地系统生成jenkins报告的问题