slf4jglassfish-4glassfish-embedded

cannot get SLF4J working with glassfish 4


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 complains about there being duplicate SLF4J bindings on the classpath and after searching, glassfish itself contains those reference.

How do I get SLF4J working? I tried making my dependency upon the SLF4J-API as provided, and then removed LogBack Classic since glassfish already contains some logback code. Doing those things doesn't yield any successful results.

Walter


Solution

  • 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