简体   繁体   中英

Implement slf4j and logback in a non-Maven Java project

SLF4J + Logback seems to be a smart choice when it comes to implement logging in a web application. However, after Googling for how to implement it, I could see that it is mostly used in Maven projects and a pom.xml file is required. Mine is a non-Maven project and there is no pom.xml file. Can I still implement SLF4J + Logback logging and how?

Maven just manages dependencies, compilation and so on. You can still use slf4j and logback, but you'll have to manually (unless using another build tool such as ant or sbt) specify the classpath to include the relevant jars when compiling and running, via -cp .

Thats correct the combination can be used iin non-maven java projects too.

Pl put follwoing jars and logback.xml in classpath:

  • logback-access-1.0.2.jar
  • logback-classic-1.0.2.jar
  • logback-core-1.0.2.jar
  • slf4j-api-1.6.4.jar

sample XML in my logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>


    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d %5p [%file:%line]  - %m%n</pattern>
        </layout>
    </appender>

    <logger name="org.uamlog">
        <level value="INFO"/>
    </logger>
    <logger name="org.uamlog">
        <level value="WARN"/>
    </logger>
    <logger name="org.uamlog">
        <level value="ERROR"/>
    </logger>
    <logger name="org.uamlog">
        <level value="DEBUG"/>
    </logger>
    <logger name="org.uamlog">
        <level value="TRACE"/>
    </logger>
    <root>
        <level value="WARN"/>

        <appender-ref ref="CONSOLE"/>
    </root>
    <root>
        <level value="INFO"/>

        <appender-ref ref="CONSOLE"/>
    </root>
    <root>
        <level value="DEBUG"/>

        <appender-ref ref="CONSOLE"/>
    </root>
    <root>
        <level value="TRACE"/>

        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

My logback test code in Java:

package checklogback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestLog {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Logger logger = LoggerFactory.getLogger("myLogger");
        logger.debug("My first comment using logback !!!"); 

    }

}

Output:

#logback.classic pattern: %d %5p [%file:%line]  - %m%n
21:22:39,905 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
21:22:39,905 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
21:22:39,906 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at
21:22:40,533 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
21:22:41,009 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
21:22:41,029 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
21:22:41,594 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
21:22:41,594 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
21:22:41,594 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
21:22:41,596 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.uamlog level set to INFO
21:22:41,596 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.uamlog level set to WARN
21:22:41,596 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.uamlog level set to ERROR
21:22:41,597 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.uamlog level set to DEBUG
21:22:41,597 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.uamlog level set to TRACE
21:22:41,597 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to WARN
21:22:41,597 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
21:22:41,598 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to INFO
21:22:41,598 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
21:22:41,598 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to DEBUG
21:22:41,598 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
21:22:41,598 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - ROOT level set to TRACE
21:22:41,599 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
21:22:41,599 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
21:22:41,620 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2fcac6db - Registering current configuration as safe fallback point

2015-02-03 21:22:41,703 DEBUG [TestLog.java:11]  - My first comment using logback !!!

Hope this helps... cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM