Log4j2记录日志

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值