cannot get SLF4J working with glassfish 4

后端 未结 2 2045
面向向阳花
面向向阳花 2020-12-08 22:36

I have configured glassfish 3 to use SLF4J in the past by using the SLF4J JUL bridge and it worked fine. The problem I\'m having now is that if I use my same setup, SLF4J c

相关标签:
2条回答
  • 2020-12-08 23:09

    This may helps you

    Download Glassfish 4, SLF4J and Logback

    Stop gf4

    $GF_INSTALL\bin>asadmin stop-domain
    

    and then

    Copy

    • jul-to-slf4j-1.7.5
    • slf4j-api-1.7.5
    • logback-core-1.0.13
    • logback-classic-1.0.13

    to

    $GF_INSTALL/glassfish/lib/endorsed

    Create logback.xml in

    $GF_INSTALL/glassfish/domains/domain1/config

    containing

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

    Modify

    $GF_INSTALL/glassfish/domains/domain1/config/logging.properties

    and replace

    handlers=java.util.logging.ConsoleHandler
    handlerServices=com.sun.enterprise.server.logging.GFFileHandler
    java.util.logging.ConsoleHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter
    com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.ODLLogFormatter
    com.sun.enterprise.server.logging.GFFileHandler.file=${com.sun.aas.instanceRoot}/logs/server.log
    com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=0
    com.sun.enterprise.server.logging.GFFileHandler.flushFrequency=1
    java.util.logging.FileHandler.limit=50000
    com.sun.enterprise.server.logging.GFFileHandler.logtoConsole=false
    com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=2000000
    com.sun.enterprise.server.logging.GFFileHandler.excludeFields=
    com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=true
    com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging=false
    java.util.logging.FileHandler.count=1
    com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours=0
    log4j.logger.org.hibernate.validator.util.Version=warn
    com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=0
    com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange=false
    java.util.logging.FileHandler.pattern=%h/java%u.log
    java.util.logging.FileHandler.formatter=java.util.logging.XMLFormatter
    

    with

    handlers=org.slf4j.bridge.SLF4JBridgeHandler
    handlerServices=com.sun.enterprise.server.logging.GFFileHandler
    java.util.logging.ConsoleHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter
    com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.ODLLogFormatter
    com.sun.enterprise.server.logging.GFFileHandler.file=/tmp/server.log
    com.sun.enterprise.server.logging.GFFileHandler.rotationTimelimitInMinutes=0
    com.sun.enterprise.server.logging.GFFileHandler.flushFrequency=1
    java.util.logging.FileHandler.limit=50000
    com.sun.enterprise.server.logging.GFFileHandler.logtoConsole=false
    com.sun.enterprise.server.logging.GFFileHandler.rotationLimitInBytes=2000000
    com.sun.enterprise.server.logging.GFFileHandler.excludeFields=
    com.sun.enterprise.server.logging.GFFileHandler.multiLineMode=true
    com.sun.enterprise.server.logging.SyslogHandler.useSystemLogging=false
    java.util.logging.FileHandler.count=1
    com.sun.enterprise.server.logging.GFFileHandler.retainErrorsStasticsForHours=0
    log4j.logger.org.hibernate.validator.util.Version=warn
    com.sun.enterprise.server.logging.GFFileHandler.maxHistoryFiles=0
    com.sun.enterprise.server.logging.GFFileHandler.rotationOnDateChange=false
    java.util.logging.FileHandler.pattern=%h/java%u.log
    com.sun.enterprise.server.logging.GFFileHandler.formatter=com.sun.enterprise.server.logging.UniformLogFormatter
    com.sun.enterprise.server.logging.GFFileHandler.alarms=false
    

    Add this two new JVM options to

    domain->configs->config->java-config

    in

    $GF_INSTALL/glassfish/domains/domain1/config/domain.xml

    <jvm-options>-Djava.util.logging.config.file=${com.sun.aas.instanceRoot}/config/logging.properties</jvm-options>
    <jvm-options>-Dlogback.configurationFile=file:///${com.sun.aas.instanceRoot}/config/logback.xml</jvm-options>
    

    then start gf4 again

    $GF_INSTALL\bin>asadmin start-domain

    0 讨论(0)
  • 2020-12-08 23:34

    If someone else having trouble with configured ch.qos.logback.core.rolling.RollingFileAppender, i might have a solution for you.

    The problem is, that following the instructions of @vzamanillo, logback itself is initialized twice. This is caused by classloader isolation of GlassFish (one time by main ClassLoader, one time by EAR ClassLoader). It becomes visible, if u configure logback with debug=true. If a RollingFileAppender is used now, two OutputStreams were opened on the same configured logfile. This prevents the logfile to be removed during rollover (visible in debug mode).

    To fix this issue, i moved the libraries from /modules/endorsed to /domains/domain1/lib/ext. Now GlassFish 4 (concrete Payara) initializes logback only once and everything works as expected.

    By the way: to replace JUL logging, specifying <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator" /> is a MUST, otherwise you are facing big performance issues.

    To dispatch also the loggings of potential 3rd party libs to SLF4j, don't forget to install the dispatcher jars as well, which are i.e.:

    • jcl-over-slf4j.jar
    • jul-to-slf4j.jar
    • log4j-over-slf4j.jar
    0 讨论(0)
提交回复
热议问题