Selenium 简明教程

Selenium - Log4j Logging

Selenium Webdriver 可用于记录测试执行期间的信息。记录主要用于提取有关执行如何发生的信息。

记录通过提供有关应用程序功能(正常工作或不正常工作)的数据来帮助增强任何应用程序。因此,记录对于提高应用程序质量和解决问题非常重要。

What is Log4j?

Log4j 是一个基于 Java 的开源框架,主要用于记录信息。这是一个直接、健壮、快速的框架。Log4j 必须使用配置文件进行配置,形式是键值对,比如 Log4j.xml 文件、Log4j.properties 文件、yaml 或 JSON 文件等。Log4 是 Apache Logging Services 的一部分。

Components of Log4j

Log4j 的组件如下所列 −

  1. Loggers

  2. Appenders

  3. Layouts

Loggers

The Loggers 包含使用 Log4j 框架产生的所有重要日志信息。Loggers 的基本组件是 −

  1. Object of Logger class.

  2. Log Levels − 日志级别帮助获取日志消息。日志级别包括 ALL 记录所有信息的 ALLERROR 只记录可能暂停执行的错误信息, WARN 只记录可能暂停执行但并非致命性的错误信息, DEBUG 记录调试所需的信息, INFO 记录应用程序如何响应的信息, TRACE 记录最详细的日志信息,以及 FATAL 记录可能导致应用程序崩溃的应用程序的挑剔信息。

Appenders

附加器从 Loggers 获取信息并将其输出到其他文件或存储。附加器包括 - FileAppender 将日志信息写入另一个文件, RollingFileAppender 与 FileAppender 类似,但对文件大小有限制,一旦文件大小超过限制,附加器创建另一个新文件来捕获剩余的日志信息, DailyRollingFileAppender 用于提供将日志信息捕获到文件的间隔,以及 ConsoleAppender 将日志信息写入控制台。

Layout

布局用于设置日志文件的格式。布局包括 - Pattern Layout、HTML Layout、XML Layout等等。

Prerequisites for Log4j Logging

  1. 在系统中安装 Java(版本高于 8),并使用以下命令检查它是否存在:java -version。如果已成功完成安装,将显示已安装的 java 版本。

  2. 在系统中安装 maven 并使用以下命令检查它是否存在:mvn -version。如果已成功完成安装,将显示已安装的 maven 版本。

  3. 安装任何一个 IDE,例如 Eclipse、IntelliJ 等等。

  4. 使用所有依赖项保存 pom.xml 并更新 Maven 项目

Steps for Log4j Logging

Step 1 − 创建一个 Maven 项目并将适当的依赖项添加到 pom.xml 文件中,用于以下项 −

  1. 从以下链接中添加 Log4j 依赖项: https://logging.apache.org/log4j/

  2. 从以下链接添加 Selenium Java 依赖项: https://mvnrepository.com/artifact/

  3. 使用所有依赖项保存 pom.xml 并更新 Maven 项目。

Step 2 − 创建一个配置文件 - log4j.xml 或 loj4j.properties 文件。在这里,我们将提供设置。在我们的项目中,我们已在 resources 文件夹下创建了一个名为 log4j2.properties 的文件。

selenium log4j logging 1

Step 3 − 创建一个测试类,在其中我们将创建一个 Logger 类的对象并纳入日志语句。运行该项目并验证结果。

Example

package Logs;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class LoggingsInfo {

   // object of Logger class
   private static Logger logger = LogManager.getLogger(LoggingsInfo.class);

   public  static void main(String args[]){

      System.out.println("Execution started: ");

      // logging messages
      logger.info("This is for information");
      logger.error("This is for error information");
      logger.warn("This is for warning information");
      logger.fatal("This is for fatal information");

      System.out.println("Execution done: ");
   }
}

log4j2.properties 文件中的配置。

name=PropertiesConfig
property.filename = logs
appenders = console, file

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

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

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

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

pom.xml 中的依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>SeleniumJava</artifactId>
   <version>1.0-SNAPSHOT</version>

   <properties>
      <maven.compiler.source>16</maven.compiler.source>
      <maven.compiler.target>16</maven.compiler.target>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
   <dependencies>

      <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.11.0</version>
      </dependency>

      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-api</artifactId>
         <version>2.23.1</version>
      </dependency>

      <dependency>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
         <version>2.23.1</version>
      </dependency>

   </dependencies>
</project>

Output

Execution started:
[INFO ] 2024-03-21 16:15:08.431 [main] LoggingsInfo - This is for information
[ERROR] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for error information
[WARN ] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for warning information
[FATAL] 2024-03-21 16:15:08.432 [main] LoggingsInfo - This is for fatal information
Execution done:

Process finished with exit code 0

此外,一个文件 LogsGenerated.log 将在项目中的 log 文件夹内生成,其中包含作为控制台输出的日志信息。

selenium log4j logging 2

我们还可以通过更新 log4j2.properties 文件中的 rootLogger.level = tracelogger.file.level = trace 来更改日志级别配置以进行跟踪。

Updated configuration log4j2.properties

name=PropertiesConfig
property.filename = logs
appenders = console, file

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

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

loggers=file
logger.file.name=Logs
logger.file.level = trace
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE

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

Example

package Logs;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class LoggingsInfo {

   // object of Logger class
   private static Logger logger =
   LogManager.getLogger(LoggingsInfo.class);

   public  static void main(String args[]){
      System.out.println("Execution started: ");

      // logging messages
      logger.trace("This is for trace information");
      logger.info("This is for information");
      logger.error("This is for error information");
      logger.warn("This is for warning information");
      logger.fatal("This is for fatal information");

      System.out.println("Execution done: ");
   }
}

Output

[TRACE] 2024-03-21 16:25:08.354 [main] LoggingsInfo - This is for trace information
[INFO ] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for information
[ERROR] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for error information
[WARN ] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for warning information
[FATAL] 2024-03-21 16:25:08.356 [main] LoggingsInfo - This is for fatal information
Execution done:

Process finished with exit code 0

此外,项目中日志文件夹中生成的 LogsGenerated.log 文件已使用跟踪信息进行更新。

selenium log4j logging 3

对于上面的两个案例,已经覆盖日志文件,但是,可以通过向 log4j2.properties 文件添加配置: appender.file.append=true 来将日志附加到日志文件。

此外,要禁用控制台和日志文件中的日志信息记录,则必须使用 logger.file.level = offrootLogger.level = off 更新 log4j2.properties。

指引教程:Selenium - Log4j 日志记录,本文到这里就结束了。我们从描述 Log4j 及其组件,设置 Log4j 的先决条件开始,最后通过说明如何将 Log4j 与 Selenium 结合使用,逐步讲解了创建 Log4j 的步骤。这让你全方位地了解了 Log4j。建议保持练习所学内容并探索其他与 Selenium 相关的内容,以加深理解并开阔视野。