NỘI DUNG BÀI HỌC



1. Tải thư viện Log4j2

Link tải: Log4j2

- Core: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core

- API: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api

Cập nhật mới nhất version 2x là 2.23.0 (updated 21/02/2024)

1.1. Maven

pom.xml
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.23.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.23.0</version>
</dependency>


1.2. Gradle

build.gradle
dependencies {
    implementation 'org.apache.logging.log4j:log4j-api:2.23.0'
    implementation 'org.apache.logging.log4j:log4j-core:2.23.0'
}

 

2. Tạo file với tên bắt buộc log4j2.properties để config


Phải đặt tên file đúng như vậy thì thư viện log4j2 mới hiểu được.

 

2.1. Config để ghi logs vào Console Log

name=PropertiesConfigLog4j2

appenders=console

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

rootLogger.level=info
rootLogger.appenderRefs=stdout
rootLogger.appenderRef.stdout.ref=STDOUT

 

2.2. Config để ghi logs vào File Log

name=PropertiesConfigLog4j2

property.filename=logs/app-properties.log

appenders=file

appender.file.type=File
appender.file.name=LOGFILE
appender.file.fileName=${filename}
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

loggers=file
logger.file.name=anhtester.com
logger.file.level=debug
logger.file.appenderRefs=file
logger.file.appenderRef.file.ref=LOGFILE

rootLogger.level=info
rootLogger.appenderRefs=file
rootLogger.appenderRef.file.ref=LOGFILE

 

2.3. Config để ghi logs vào cả Console Log File Log

name=PropertiesConfigLog4j2
property.filename=logs/applog.log
appenders=console, file

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

appender.file.type=File
appender.file.name=LOGFILE
appender.file.fileName=${filename}
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

loggers=file
logger.file.name=LOGFILE
logger.file.level=info
logger.file.appenderRefs=file
logger.file.appenderRef.file.ref=LOGFILE

rootLogger.level=info
rootLogger.appenderRefs=stdout, file
rootLogger.appenderRef.stdout.ref=STDOUT
rootLogger.appenderRef.file.ref=LOGFILE


[REST Assured] Bài 16 - Cài đặt và sử dụng Log4j để ghi logs vào file | Anh Tester


Cái chổ mà định dạng ngày giờ nè:

layout.pattern=[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n

VD khi nó sinh ra Log thì như này: [INFO ] 13-12-2021 04:09:02 [main] Log - loginPage


Còn chổ định dạng tên file thì property.filename=logs/app-properties.log

Chú ý là nó tính cả thư mục và tên file chấm phần mở rộng luôn. Các bạn có thể đổi phần mở rộng sang txt chẵn hạn. 

 

3. Tạo file với tên log4j2.xml để config

 

3.1. Config để ghi logs vào Console Log

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Appenders>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
		<!-- tránh các bản ghi bị trùng lặp thì set additivity=false -->
        <Logger name="LogToConsole" level="debug" additivity="false">
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToConsole"/>
        </Root>
    </Loggers>
</Configuration>

 

3.2. Config để ghi logs vào File Log

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Appenders>
        <File name="LogToFile" fileName="logs/app-xml.log">
            <PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <!-- tránh các bản ghi trùng lặp thì set additivity=false -->
        <Logger name="LogToConsole" level="debug" additivity="false">
            <AppenderRef ref="LogToFile"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToFile"/>
        </Root>
    </Loggers>
</Configuration>

 

3.3. Config để ghi logs vào cả Console Log và File Log

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Appenders>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
        </Console>
        <File name="LogToFile" fileName="logs/app-xml.log">
            <PatternLayout pattern="[%-5level] %d{dd-MM-yyyy HH:mm:ss} [%t] %c{1} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="anhtester.com" level="debug" additivity="false">
            <AppenderRef ref="LogToFile"/>
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToFile"/>
            <AppenderRef ref="LogToConsole"/>
        </Root>
    </Loggers>
</Configuration>



Chú ý:
sử dụng Properties hoặc XML cái nào chỉ 1 cái thôi nhé. Cái còn lại đặt tên khác chữ "log4j2" là được.

 

4. Tạo class setup Logger để gọi lại

Các bạn tạo class tên LogUtils (tên gì cũng được) và viết đoạn code như bên dưới:

package anhtester.com.common.ultilities;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogUtils {
    //Initialize Log4j instance
    private static final Logger Log = LogManager.getLogger(LogUtils.class);

    //Info Level Logs
    public static void info(String message) {
        Log.info(message);
    }

    public static void info(Object object) {
        Log.info(object);
    }

    //Warn Level Logs
    public static void warn(String message) {
        Log.warn(message);
    }

    public static void warn(Object object) {
        Log.warn(object);
    }

    //Error Level Logs
    public static void error(String message) {
        Log.error(message);
    }

    public static void error(Object object) {
        Log.error(object);
    }

    //Fatal Level Logs
    public static void fatal(String message) {
        Log.fatal(message);
    }

    //Debug Level Logs
    public static void debug(String message) {
        Log.debug(message);
    }

    public static void debug(Object object) {
        Log.debug(object);
    }
}



Các hàm để static nên khi xíu gọi lại dùng bên test case thì chỉ cần lấy tên Class chấm cái tên Method là được rồi.


5. Tạo test case gọi Log ra dùng

Các bạn tạo class test nào đó. Ví dụ thì An lấy class có sẵn cho nhanh.

Để ghi log thì các bạn gọi đúng 1 dòng code như này:

LogUtils.info("ghi cái gì đó ra đây");

Cái trên là dành cho biết THÔNG TIN của một việc làm gì đó thông thường.

Ngoài ra thì còn có 4 cái loại còn lại của class Log trên setup á. Loại thông tin là gì thì dùng dạng cho phù hợp. VD lỗi thì dùng LogUtils.error

LogUtils.debug("This is a debug message");
LogUtils.warn("This is a warn message");
LogUtils.error("This is an error message");
LogUtils.fatal("This is a fatal message");





🔆 Kết quả Logs sẽ được ghi lại sau khi chạy test case

(bên dưới là An dùng cả 2 dạng ghi log vào Console và File)



Logs sẽ được ghi dồn phía bên dưới trong file log. Nên sẽ không bị mất đi lịch sử lần chạy trước đó.

Nếu bạn muốn reset thì xoá file log đi nó sẽ render lại file mới cho lần chạy mới.


✳️ Các vị trí cần ghi logs

- ApiKeyword
- TestListener
- Các phương thức load trước khi chạy test như: PropertiesHelper, ExcelHelper,...

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học