Nội dung bài học

Cách sử dụng Log4j2 (version 2x) để ghi Log vào file trong Selenium Java

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

 

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.20.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.22.0</version>
</dependency>


1.2. Gradle

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


Chú ý là vấn đề bảo mật ở bảo cũ có lỗi bị Hack nên là phải dùng bản 2.17.0 trở về sau nhé. (updated 18/12/2021)
Cập nhật mới nhất 2.20.0 (updated 21/02/2023)

 

2. Tạo file log4j2.properties để config

2.1. Config để ghi log cho Console Log

name=PropertiesConfigLog4j2

appenders=console

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%-5level] %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 log cho 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.filePattern=logs/applog-%d{dd-MM-yyyy}.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %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 log cho cả Console Log và File Log

name=PropertiesConfigLog4j2
property.filename=logs/app-properties.log
appenders=console, file

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%-5level] %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.filePattern=logs/applog-%d{dd-MM-yyyy}.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %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


[Selenium Java] Bài 30: Sử dụng Log4j để ghi Log vào file trong Selenium Java | 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 log4j2.xml để config

3.1. Config để ghi log cho 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="anhtester.com" level="debug" additivity="false">
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToConsole"/>
        </Root>
    </Loggers>
</Configuration>

 

3.2. Config để ghi log cho 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="anhtester.com" level="debug" additivity="false">
            <AppenderRef ref="LogToFile"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToFile"/>
        </Root>
    </Loggers>
</Configuration>

 

3.3. Config để ghi log cho 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>


[Selenium Java] Bài 30: Sử dụng Log4j để ghi Log vào file trong Selenium Java | Anh Tester


Chú ý: sử dụng Properties hoặc Xml cái nào 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 Log (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 Log {
        //Initialize Log4j instance
    private static final Logger Log =  LogManager.getLogger(Log.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);
    }
}


[Selenium Java] Bài 30: Sử dụng Log4j để ghi Log vào file trong Selenium Java | Anh Tester


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 =))

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

Cái trên là dành cho biết THÔNG TIN

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 Log.error

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


[Selenium Java] Bài 30: Sử dụng Log4j để ghi Log vào file trong Selenium Java | Anh Tester



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


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

[Selenium Java] Bài 30: Sử dụng Log4j để ghi Log vào file trong Selenium Java | Anh Tester


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

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

  • Anh Tester

    Đườ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ẻ kiến thức lên trang

Bạn có thể đăng bài để chia sẻ kiến thức, bài viết của chính bạn lên trang Anh Tester Blog

Danh sách bài học