1:导入依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</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.11.1</version>
</dependency>
2:Log4j2记录日志的级别与顺序
2.1:Log4j2日志级别的顺序
Log4j2日志级别如下 最高级别为ALL
ALL-->TRACE-->DEBUG-->INFO-->WARN-->ERROR-->FETAL
2.2:Log4j2日志默认输出ERROR和FETAL级别的日志
- 如下代码:
package Log4jCase;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* 登录案例联系extendsreports
* */
public class loginTestCase {
private WebDriver driver;
//定义Logger对象
private static final Logger log = LogManager.getLogger(loginTestCase.class.getName());
@BeforeClass
public void BeforeLoginCase(){
driver = new FirefoxDriver();
log.fatal("browers start。。。");
log.error("browers start。。。");
log.debug("browers start。。。");
driver.get("https://mail.qq.com/cgi-bin/loginpage");
}
@Test
public void LoginCase(){
driver.switchTo().frame(driver.findElement(By.id("login_frame")));
driver.findElement(By.id("u")).sendKeys("账号");
driver.findElement(By.id("p")).sendKeys("密码");
driver.findElement(By.xpath("//input[@value='登 录']")).click();
//断言是否登录成功 Anndy_Yang文本信息断言
WebElement findElement = null;
try{
Thread.sleep(3000);//演示可以给程序登录的时间 否则找不到登陆后的元素
findElement = driver.findElement(By.xpath("//b[text()='Anndy_Yang']"));
}catch(Exception e){
System.out.println(e.getMessage());
}
Assert.assertFalse(findElement == null);
}
@AfterClass
public void AfterLoginCase(){
driver.close();
}
}
- 输出结果:默认输出ERROR和FALAT级别的日志
3:Log4j2配置文件的用法
- 项目根目录下创建Log4j2文件夹 并add到Build Path下(如果不这样做程序找不到log4j2.xml)
- log4j2.xml文件的写法
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 日志输出的位置 -->
<Appenders>
<!-- 日志在控制台输出用 Console -->
<Console name="ConsoleOut">
<!-- 日志显示的风格 -->
<PatternLayout pattern="%d{YYY-MM-dd-HH:mm:ss.SSS} %-5level %c{1} -%msg%n" />
</Console>
</Appenders>
<Loggers>
<!-- 日志输出级别为info -->
<Root level="info">
<!-- 前面有定义Console的名称为ConsoleOut -->
<AppenderRef ref="ConsoleOut" />
</Root>
</Loggers>
</Configuration>
- 程序代码Demo
package Log4jCase;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* 登录案例联系extendsreports
* */
public class loginTestCase {
private WebDriver driver;
//定义Logger对象
private static final Logger log = LogManager.getLogger(loginTestCase.class.getName());
@BeforeClass
public void BeforeLoginCase(){
driver = new FirefoxDriver();
log.info("browers start。。。");
driver.get("https://mail.qq.com/cgi-bin/loginpage");
log.info("enter Path");
}
@Test
public void LoginCase(){
driver.switchTo().frame(driver.findElement(By.id("login_frame")));
driver.findElement(By.id("u")).sendKeys("QQhaoma");
log.info("Enter username");
driver.findElement(By.id("p")).sendKeys("QQ密码");
log.info("Enter password");
driver.findElement(By.xpath("//input[@value='登 录']")).click();
log.info("Click loginButtion");
//断言是否登录成功 Anndy_Yang文本信息断言
WebElement findElement = null;
try{
Thread.sleep(3000);//演示可以给程序登录的时间 否则找不到登陆后的元素
findElement = driver.findElement(By.xpath("//b[text()='Anndy_Yang']"));
}catch(Exception e){
System.out.println(e.getMessage());
}
Assert.assertFalse(findElement == null);
}
@AfterClass
public void AfterLoginCase(){
driver.close();
log.info("browers closed...");
}
}
- 控制台输出结果
4:输出到外部文件夹中
- 日志输出到外部文件夹中只需要设置log4j2.xml配置文件即可
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 日志输出的位置 -->
<Properties>
<!-- 保存在当前路径的logs文件夹下 -->
<Property name="basePath">./logs</Property>
</Properties>
<!-- 日志输出的位置 -->
<Appenders>
<!-- filePattern表示滚动一天记录日志命名 -->
<RollingFile name="file" fileName="${basePath}/test.log"
filePattern="${basePath}/test-%d{yyyy-MM-dd}.log">
<PatternLayout charset="UTF-8" pattern="%d{YYY-MM-dd-HH:mm:ss。SSS} %-5level %c{1} -%msg%n" />
<Policies>
<!-- interval="1"基于时间触发RollingFile 表示滚动一天记录日志 -->
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
<!-- 日志在控制台输出用 Console -->
<Console name="ConsoleOut">
<!-- 日志显示的风格 -->
<PatternLayout pattern="%d{YYY-MM-dd-HH:mm:ss。SSS} %-5level %c{1} -%msg%n" />
</Console>
</Appenders>
<Loggers>
<!-- 日志输出级别为info -->
<Root level="info">
<!-- 前面有定义RollingFile的名称为file -->
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
- 这样 日志就会输出在项目根目录下的logs文件夹下了 charset="UTF-8"日志输出也不会有乱码了
5:不同的package下的class输出不同级别的日志
- 只需要修改log4j2.xml的配置即可实现
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 日志输出的位置 -->
<Properties>
<!-- 保存在当前路径的logs文件夹下 -->
<Property name="basePath">./logs</Property>
</Properties>
<!-- 日志输出的位置 -->
<Appenders>
<!-- filePattern表示滚动一天记录日志命名 -->
<RollingFile name="file" fileName="${basePath}/test.log"
filePattern="${basePath}/test-%d{yyyy-MM-dd}.log">
<PatternLayout charset="UTF-8"
pattern="%d{YYY-MM-dd-HH:mm:ss。SSS} %-5level %c{1} -%msg%n" />
<Policies>
<!-- interval="1"基于时间触发RollingFile 表示滚动一天记录日志 -->
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
<!-- 日志在控制台输出用 Console -->
<Console name="ConsoleOut">
<!-- 日志显示的风格 -->
<PatternLayout pattern="%d{YYY-MM-dd-HH:mm:ss。SSS} %-5level %c{1} -%msg%n" />
</Console>
</Appenders>
<Loggers>
<!-- ===============不同的Package记录不同级别的日志信息============ -->
<!-- Package1包下的所有class记录日志级别为error additivity = "false"表示不被Root再次记录-->
<Logger name = "Package1" level = "error" additivity = "false" >
<!-- 前面有定义RollingFile的名称为file -->
<AppenderRef ref = "file" />
</Logger>
<!-- Package2包下的所有class记录日志级别为debug -->
<Logger name = "Package2" level = "debug" additivity = "false" >
<AppenderRef ref = "file" />
</Logger>
<!-- ===============不同的Package记录不同级别的日志信息============ -->
<!-- 日志输出级别为info -->
<Root level="info">
<!-- 前面有定义RollingFile的名称为file -->
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>