Logback的配置和使用(終極)


 

1.logback介紹

logback是由log4j創始人設計的又一個開源日志組件。logback當前分成三個模塊:logback-core,logback-classic和logback-access。logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日志系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能(用的少)

2. maven依賴

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>

logback-classic包含了logback-core,不需要再單獨引用了。

 

3. 配置和使用

1. 日志使用

我們使用org.slf4j.LoggerFactory,就可以直接使用日志了。

private static final Logger logger = LoggerFactory.getLogger(this.getClass());

使用:

@Controller @RequestMapping(value = "") public class IndexController extends BaseController { /** * Success * @param response * @throws IOException */ @RequestMapping(value = "") @ResponseBody public void hello(HttpServletResponse response) throws IOException { logger.debug("DEBUG TEST 這個地方輸出DEBUG級別的日志"); logger.info("INFO test 這個地方輸出INFO級別的日志"); logger.error("ERROR test 這個地方輸出ERROR級別的日志"); } } 

2. 在控制台輸出特定級別的日志

logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。其中logback.xml文件就是logback的配置文件。只要將這個文件放置好了之后,系統會自動找到這個配置文件。

下面的配置中,我們輸出特定的ERROR級別的日志:

<?xml version="1.0"?>  
<configuration>  
  
    <!-- ch.qos.logback.core.ConsoleAppender 控制台輸出 -->  
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
        <encoder charset="UTF-8">  
            <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>  
        </encoder>  
    </appender>  
  
    <!-- 日志級別 -->  
    <root>  
        <level value="error" />  
        <appender-ref ref="console" />  
    </root>  
  
</configuration>   

結果只在控制台輸出ERROR級別的日志。

3. 設置輸出多個級別的日志

<?xml version="1.0"?>  
<configuration>  
  
    <!-- ch.qos.logback.core.ConsoleAppender 控制台輸出 -->  
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
        <encoder>  
            <pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>  
        </encoder>  
    </appender>  
  
    <!-- 日志級別 -->  
    <root>  
        <level value="error" />  
        <level value="info" />  
        <appender-ref ref="console" />  
    </root>  
  
</configuration>   

設置兩個level,則可以輸出 ERROR和INFO級別的日志了。

4. 設置文件日志(你懂得)

additivity="false"很少將這個屬性設置為true

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

    <!-- ch.qos.logback.core.ConsoleAppender 控制台輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志輸出 -->
    <appender name="INFO"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/guide_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/guide_info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>50MB</MaxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- ch.qos.logback.core.rolling.RollingFileAppender 異常日志輸出 -->
    <appender name="ERROR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${catalina.base}/logs/guide_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${catalina.base}/logs/guide.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>50MB</MaxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--打印info級別的日志-->
    <logger name="infoLog" level="info" additivity="false">
        <appender-ref ref="INFO" />
    </logger>

    <!--打印異常錯誤日志-->
    <logger name="errorLog" level="error" additivity="false">
        <appender-ref ref="ERROR" />
    </logger>

    <!-- 日志級別 -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

 

public class Test {
    public static void main(String[] args) {
        Logger INFO_LOG = LoggerFactory.getLogger("infoLog");

        Logger ERROR_LOG = LoggerFactory.getLogger("errorLog");

        INFO_LOG.info("業務日志");

        ERROR_LOG.error("異常日志");
    }
}

 

/**
 * Return a logger named according to the name parameter using the
 * statically bound {@link ILoggerFactory} instance.
 * 
 * @param name
 *            The name of the logger.
 * @return logger
 */
public static Logger getLogger(String name) {
    ILoggerFactory iLoggerFactory = getILoggerFactory();
    return iLoggerFactory.getLogger(name);
}

5. 精確設置每個包下面的日志

<logger name="com.xxx" additivity="false">  
    <level value="info" />  
    <appender-ref ref="file" />  
    <appender-ref ref="console" />  
</logger>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM