章节十五、9-自定义Loggers
2024-09-08 03:57:30
一、如何给不同的包设置不同的日志级别?
1、针对不同的包来记录不同级别的日志信息
2、在日志xml配置文件中加入配置信息(红色标注)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 将log信息记录到指定文件夹中 -->
<!-- “.”表示当前路径, ./logs表示将log信息存放到该项目的logs文件夹中 -->
<Properties>
<Property name="basePath">./logs</Property>
</Properties>
<!-- appenders表示日志输出的位置 -->
<Appenders>
<!-- 给记录日志的文件命名 -->
<RollingFile
name="File"
fileName="${basePath}/app.log"
filePattern="${basePath}/app-%d{yyyy-MM-dd}.log">
<!-- 设置输出的log信息格式 -->
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %c{2} -%msg%n" />
<Policies>
<!-- 基于时间触发生成文件的策略 -->
<!-- interval="1"表示每隔一天就会创建新的日志文件 -->
<TimeBasedTriggeringPolicy
interval="1"
modulate="true" />
<!-- 基于大小触发生成文件的策略 -->
<SizeBasedTriggeringPolicy size="100 KB" />
</Policies>
</RollingFile>
<!-- 表示在控制台上输出信息 -->
<Console name="Console">
<!-- 设置输出的log信息格式 -->
<PatternLayout
pattern="%d{HH:mm:ss.SSS} %-5level %c{2} -%msg%n" />
</Console>
</Appenders>
<Loggers>
<!-- 从不同的包中记录不同级别的日志信息 -->
<!-- 设置log4jtutorial包中记录info级别以上的日志信息 -->
38 <logger
39 name="log4jtutorial"
40 level="info"
41 additivity="false">
42 <AppenderRef ref="File" />
43 </logger>
44 <!-- 设置log4j包中只记录debug级别以上的日志信息 -->
45 <logger
46 name="log4j"
47 level="debug"
48 additivity="false">
49 <AppenderRef ref="File" />
50 </logger>
<!-- 定义级别 -->
<!-- 设置所有包中的类都记录trace级别以上的日志信息 -->
<Root level="trace">
<!-- 输出日志的目的地 -->
<AppenderRef ref="File" />
</Root>
</Loggers>
</Configuration>
注:
<logger name="log4jtutorial" level="info" additivity="false">
name="log4jtutorial":因为我们需要配置log4jtutorial包中的类输出info级别以上的日志,因此name需要赋值相对应的包名log4jtutorial。
level="info":表示只输出info级别以上的日志。
additivity="false":因为<Root level="trace"><AppenderRef ref="File" /></Root>设置的是针对于全部包输出的日志级别,如果
additivity不设置为flase,那么log4jtutorial包中的类日志信息会输出2次。
3、打印日志信息类
log4jtutorial包中的类
package log4jtutorial; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; public class LoggingFile { private static final Logger log = LogManager.getLogger(LoggingFile.class.getName());
public static void main(String[] args) { log.trace("Trace message logged");
log.debug("Debug message logged");
log.info("Info message logged");
log.error("Error message logged");
log.fatal("Fatal message logged");
}
}
log4j包中的类
package log4j; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; public class LoggingDemo { // 首先需要定义一个log对象
// 定义成static final是因为只需要这一个实例,不能再有子类,多次调用的都是这一个实例,所以我们可以一直用这个对象来记录日志,不需要创建新的对象。
// .getLogger()方法返回的是一个Logger对象实例
// 括号里面的参数用来记现在所在的类(LoggingDemo.class.getName())
private static final Logger log = LogManager.getLogger(LoggingDemo.class.getName()); public static void main(String[] args) {
log.trace("Trace message logged");
log.debug("Debug message logged");
log.info("Info message logged");
log.error("Error message logged");
log.fatal("Fatal message logged");
}
}
4、日志输出信息
log4jtutorial包中的类日志输出信息
log4j包中的类日志输出信息
二、如何将log4j应用到测试用例中
package log4jtutorial; import static org.junit.jupiter.api.Assertions.*; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; class TestNG_TestCase { private WebDriver driver;
private String url;
// 声明一个log对象
private static final Logger log = LogManager.getLogger(TestNG_TestCase.class.getName()); @BeforeEach
void setUp() throws Exception {
driver = new ChromeDriver();
url = "https://www.baidu.com";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(2000, TimeUnit.SECONDS);
// 列如我们需要在打开浏览器最大化之后记录log,那么我们就在此处设置log记录代码
log.info("浏览器最大化 ");
} @Test
void test() {
driver.get(url);
log.info("打开网站");
} @AfterEach
void tearDown() throws Exception {
Thread.sleep(2000);
driver.quit();
}
}
打印结果:
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。
最新文章
- python基础-迭代器和生成器
- 全球首发免费的MySql for Entity Framework Core
- RMAN的入门篇
- PHP 常用获取路径代码
- 用Js的eval解析JSON中的注意点
- Linux简史
- C/C++:作用域、可见性与生存期
- PNP8550(3.3V DC蜂鸣器) - 原理图系列
- css 权威指南笔记(一)
- DM368启动串口打印分析
- PCB设计铜铂厚度、线宽和电流关系
- oc底层方法调用流程
- zabbix回顾
- Bitmap too larget to be uploaded into a texture的解决方法
- Java 获取class method parameter name
- CentOS7日期时间设置方法以及时间基本概念介绍
- shaderFX一些小心得
- MVC源码分析 - Action查找和过滤器的执行时机
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
- 非局部均值滤波算法的python实现