Nhật ký (Log) trong Java: Hướng dẫn sử dụng Log4j và Logback

Giới thiệu

1.1 Giới thiệu về nhật ký (log)

Nhật ký được sử dụng để ghi lại các sự kiện xảy ra trong hệ thống. Các vị trí lưu trữ nhật ký phổ biến bao gồm: console, tệp trên đĩa, v.v.

1.2 Cấp độ nhật ký

Các cấp độ nhật ký từ thấp đến cao: - TRACE, DEBUG, INFO, WARN, ERROR, FATAL

1.3 Tác dụng của nhật ký

  • Quan sát và phân tích tình trạng hoạt động của dự án (dự án bảo trì).
  • Phân tích cách người dùng sử dụng thông qua nhật ký (phân tích dữ liệu lớn).

Giải pháp 1: Sử dụng Log4j và Commons-Logging

2.1.1 Thêm phụ thuộc

Thêm phụ thuộc Log4j và Commons-Logging vào dự án:


<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

2.1.2 Sử dụng cơ bản

Ví dụ về API cơ bản của Log4j và Commons-Logging:


package com.example.logging;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;

public class LogTest {
    private Log log = LogFactory.getLog(LogTest.class);

    @Test
    public void test() {
        log.trace("hello trace");
        log.debug("hello debug");
        log.info("hello info");
        log.warn("hello warn");
        log.error("hello error");
        log.fatal("hello fatal");
    }
}

2.1.3 Cấu hình

Tạo tệp cấu hình log4j.xml:





    <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>

    <appender name="myFile1" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="d:/log/hello1.log"/>
        <param name="Append" value="true"/>
        <param name="MaxFileSize" value="1kb"/>
        <param name="MaxBackupIndex" value="2"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>

    <appender name="myFile2" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="d:/log/daily.log"/>
        <param name="Append" value="true"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n"/>
        </layout>
    </appender>

    <root>
        <priority value="debug"/>
        
        
        
    </root>


Giải pháp 2: Sử dụng Logback và SLF4j

3.1.1 Thêm phụ thuộc

Thêm phụ thuộc Logback và SLF4j vào dự án:


<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    <scope>test</scope>
</dependency>

3.1.2 Sử dụng cơ bản

Ví dụ về API cơ bản của Logback và SLF4j:


package com.example.logging;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {
    private Logger log = LoggerFactory.getLogger(LogTest.class);

    @Test
    public void test() throws InterruptedException {
        log.trace("hello trace");
        log.debug("hello debug Nguyễn Văn A");
        log.info("hello info Nguyễn Văn A");
        log.warn("hello warn Nguyễn Văn A");
        log.error("hello error Nguyễn Văn A");
    }
}

3.1.3 Cấu hình

Tạo tệp cấu hình logback.xml:



<configuration scan="true" scanPeriod="60 seconds" debug="true">
    <property name="log.path" value="d:/log"/>
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} |-{%-5p} in %logger.%M[line-%L] -%m%n"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="file1" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/hello.log</file>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
        </encoder>
    </appender>

    <appender name="file2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/logback.log</file>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1kb</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>1</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="trace">
        
        
        
    </root>
</configuration>

Thẻ: log4j Commons-Logging Logback SLF4j Java

Đăng vào ngày 27 tháng 5 lúc 10:24