Исключение при входе в систему при кодировании 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 и запустите снова, решит вашу проблему определенно.