Colors Glassfish 4和SLF4J-使用Jansi的彩色控制台输出

Colors Glassfish 4和SLF4J-使用Jansi的彩色控制台输出,colors,glassfish,classloader,slf4j,logback,Colors,Glassfish,Classloader,Slf4j,Logback,我在Glassfish 4上设置了日志记录,以使用SLF4J和Logback,使用以下指南: 之后,我认为彩色控制台输出可能更易于动态阅读,因此我修改了配置,将其也输出到控制台,并使用一些颜色添加了控制台附加器,如下所述: 我的lockback.xml现在基本上如下所示: <configuration debug="true" scan="true"> <appender name="FILE" class="ch.qos.logback.core.FileAppend

我在Glassfish 4上设置了日志记录,以使用SLF4J和Logback,使用以下指南:

之后,我认为彩色控制台输出可能更易于动态阅读,因此我修改了配置,将其也输出到控制台,并使用一些颜色添加了控制台附加器,如下所述:

我的lockback.xml现在基本上如下所示:

<configuration debug="true" scan="true">
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${com.sun.aas.instanceRoot}/logs/gf_server.log</file>
        <append>true</append>
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{52} - %msg%n</Pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <withJansi>true</withJansi>
        <encoder>
          <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{52}) - %msg%n</pattern>
        </encoder>
    </appender>

    <root>
        <level value="INFO"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
之后,我下载了jansi库jansi-1.11.jar,并将其添加到$GF_INSTALL/glassfish/lib/annocated文件夹中,SLF4J的库就放在这个文件夹中

不幸的是,如果启动Glassfish,我会出现以下错误:

WARN in ch.qos.logback.core.ConsoleAppender[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:73)
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:42)
        at      at ch.qos.logback.core.ConsoleAppender.getTargetStreamForWindows(ConsoleAppender.java:94)
        at      at ch.qos.logback.core.ConsoleAppender.start(ConsoleAppender.java:85)
        at      at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:96)
        at      at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317)
        at      at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196)
        at      at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182)
        at      at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49)
        at      at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at      at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        at      at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
        at      at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at      at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
        at      at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
        at      at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
        at      at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:204)
        at      at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:291)
        at      at java.util.logging.Logger.log(Logger.java:610)
        at      at java.util.logging.Logger.doLog(Logger.java:631)
        at      at java.util.logging.Logger.log(Logger.java:675)
        at      at com.sun.enterprise.glassfish.bootstrap.osgi.BundleProvisioner.createBundleProvisioner(BundleProvisioner.java:797)
        at      at com.sun.enterprise.glassfish.bootstrap.osgi.OSGiGlassFishRuntimeBuilder.build(OSGiGlassFishRuntimeBuilder.java:140)
        at      at org.glassfish.embeddable.GlassFishRuntime._bootstrap(GlassFishRuntime.java:157)
        at      at org.glassfish.embeddable.GlassFishRuntime.bootstrap(GlassFishRuntime.java:110)
        at      at com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:112)
        at      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at      at java.lang.reflect.Method.invoke(Method.java:606)
        at      at com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:97)
        at      at com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:54)
Caused by: java.lang.reflect.InvocationTargetException
        at      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at      at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at      at ch.qos.logback.core.util.OptionHelper.instantiateByClassNameAndParameter(OptionHelper.java:68)
        at      ... 36 common frames omitted
 aused by: java.io.IOException: Could not get the screen info: T h e   o p e r a t i o n   c o m p l e t e d   s u c c e s s f u l l y .

        at      at org.fusesource.jansi.WindowsAnsiOutputStream.getConsoleInfo(WindowsAnsiOutputStream.java:104)
        at      at org.fusesource.jansi.WindowsAnsiOutputStream.<init>(WindowsAnsiOutputStream.java:97)
        at      ... 41 common frames omitted
很明显,类加载器没有找到所需的类。我对Glassfish上的类加载器层次结构进行了一些研究,将库复制到其他几个位置—域的lib/ext文件夹、Glassfish服务器的lib/annowed文件夹、Glassfish服务器的modules文件夹,但没有成功

我的问题是: 是否可以使用SLF4J和Glassfish获得彩色控制台输出?如果可以,如何获得

谢谢你的帮助