Исключение при входе в систему при кодировании ANSI для отображения консоли на Windows 10 64bit

Не могу найти ответ на этот вопрос, может кто-нибудь высказать решение.

У меня есть библиотека jar, которую я создаю и использую logback (logabck 1.2.3, jansi 1.16) и groovy, и я пытаюсь раскрасить код отображения журнала - как это удается сделать при загрузке с помощью Spring - но я не хотел Spring загрузиться как зависимость для этой библиотеки я строю.

Я включил библиотеку jansi (1.16, как указано в logabck docs) как зависимость от сборки 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 что все, что нужно было сделать, - это обернуть поток вывода, поэтому я создал собственный консольный appender в моем проекте, как этот

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, и вы получаете цветную консоль, так что кто-то знает, как это сделать. Но я не знаю, в чем проблема

Кто-нибудь получил базовую цветовую кодировку Янси для входа (1.2.3) под Windows, чтобы работать? Если так, то в чем секрет.

На данный момент я должен был отключить, но хотел бы заставить это работать. Немного расстраивает

1 ответ

Я исправил эту проблему, удалив с Янси

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

GOTO> Папка установки TOMCAT

Вы найдете этот параметр в файле logback.xml, который находится внутри TOMCAT_INSTALL_DIR/conf/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 и запустите снова, решит вашу проблему определенно.

Другие вопросы по тегам