章节十五、9-自定义Loggers
一、如何给不同的包设置不同的日志级别?
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基础开始。
欢迎关注,转载请注明来源。
章节十五、9-自定义Loggers的更多相关文章
- Struts(二十五):自定义验证器
编程验证 Struts2提供了一个Validateable接口,可以使用Action类实现这个接口以提供编程验证: ActionSupport类已经实现了Validateable接口. public ...
- Dynamic CRM 2013学习笔记(三十五)自定义审批流6 - 审批通过后,再审批 - 二次审批
最近有个特殊的需求,客户想做二次审批,就是审批通过后,再走一次审批流程.最开始一想,这还不简单,审批通过后,直接把状态改成draft就完了,后来一试,发现一堆问题,比如第一次审批完后,界面是不允许修改 ...
- 章节十五、5-记录日志---Log4j
一.为什么要用Log4j记录日志? 日志记录对于任何应用程序都非常重要. 它可以帮助我们快速调试代码,通过收集代码执行的信息让代码容易维护. 二.Log4j 是什么? Apache为Java提供的日志 ...
- 章节十五、7- 配置文件-Console Logging
一.创建xml文件 1.创建xml文件 在项目中我们需要专门建一个文件夹来放xml文件或者是其它文件. 2.然后对文件夹进行命名 3.选择new 其它 4.选择XML File 5.给xml文件命名 ...
- 章节十五、8-配置文件File Logging
一.如何将log输出到文件中? 1.配置xml文件 <?xml version="1.0" encoding="UTF-8"?> <Confi ...
- 章节十五、3-对象仓库、Page Factory实例应用
一.如何创建对象仓库 package pageclasses; import org.openqa.selenium.WebDriver; import org.openqa.selenium.Web ...
- 章节十五、6-log4 2-用默认的配置
一.实例演示 package log4jtutorial; import org.apache.logging.log4j.LogManager; import org.apache.logging. ...
- 章节十五、2-PageObjectModel
一.在实现自动化过程中,会有很多重复的代码,我们在维护代码时会很困难,如果想解决这个问题,我们就需要使用PageObjectModel(页面对象模型)的方式来进行自动化代码的书写. 二.案例演示 以该 ...
- Ionic3学习笔记(十五)自定义 tab icon
本文为原创文章,转载请标明出处 美工做了一套 icon,自然是要用的.将 icon copy 到 assets 文件夹下. 例如 .icon-ios-home-custom 为 iOS icon 选中 ...
随机推荐
- 哈工大计算机网络Week1-网络应用
目录 哈工大计算机网络Week1-网络应用 2.1网络应用的体系结构 特点 应采取什么结构 C/S结构 客户机/服务器 P2P CS vs P2P 混合结构 思考题目 2.2网络应用的基本原理 网络应 ...
- 磁盘大保健 保持你的Linux服务器存储健康
df du -sh *| sort -nr du -h --max-depth=1 / du -h --max-depth=1 /* find . -type f -size +1000000k 查找 ...
- Running Code on a Thread Pool Thread_翻译
The previous lesson showed you how to define a class that manages thread pools and the tasks that ru ...
- Maven(二)Maven 的基本配置
Maven 的基本配置 Maven 中仓库的概念 Maven 中的仓库是用拿过来存储所有项目的依赖关系的.当你创建一个 Maven 项目时,Maven 会通过依赖机制先到你本地仓库(自己维护的仓库)中 ...
- [小米OJ] 4. 最长连续数列
思路: 时间限制为O(n),即不能使用先排序后寻找的方法. 这里利用哈希表查询插入复杂度都为O(1)的特性来解,利用一个哈希表来保存每一个数字以及其所在数列的长度. 遍历每一个数字n:查询表中是否存在 ...
- [PTA] 数据结构与算法题目集 6-12 二叉搜索树的操作集
唯一比较需要思考的删除操作: 被删除节点有三种情况: 1.叶节点,直接删除 2.只有一个子节点,将子节点替换为该节点,删除该节点. 3.有两个子节点,从右分支中找到最小节点,将其值赋给被删除节点的位置 ...
- 小白开学Asp.Net Core 《一》
在开篇中介绍了项目的搭建以及项目中所用到的第三方工具 本篇介绍SqlSugar和Dapper在本项目的实现 一.SqlSugar SqlSuagr的介绍就直接浏览官方网站,官网地址将在底部给出. 在本 ...
- 【SVN】SVN使用教程总结
SVN使用教程总结 SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subve ...
- 仿制shazzam的简单功能,将hlsl转换为WPF中的ShaderEffect
(此文章只是在对WPF的Effect产生兴趣才稍微研究了一点后面的知识;需要了解更多可参考https://archive.codeplex.com/?p=shazzam的源代码以及WPF基础知识) 1 ...
- spark 源码分析之十一--Spark RPC剖析之TransportClient、TransportServer剖析
TransportClient类说明 先来看,官方文档给出的说明: Client for fetching consecutive chunks of a pre-negotiated stream. ...