一、如何给不同的包设置不同的日志级别?

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的更多相关文章

  1. Struts(二十五):自定义验证器

    编程验证 Struts2提供了一个Validateable接口,可以使用Action类实现这个接口以提供编程验证: ActionSupport类已经实现了Validateable接口. public ...

  2. Dynamic CRM 2013学习笔记(三十五)自定义审批流6 - 审批通过后,再审批 - 二次审批

    最近有个特殊的需求,客户想做二次审批,就是审批通过后,再走一次审批流程.最开始一想,这还不简单,审批通过后,直接把状态改成draft就完了,后来一试,发现一堆问题,比如第一次审批完后,界面是不允许修改 ...

  3. 章节十五、5-记录日志---Log4j

    一.为什么要用Log4j记录日志? 日志记录对于任何应用程序都非常重要. 它可以帮助我们快速调试代码,通过收集代码执行的信息让代码容易维护. 二.Log4j 是什么? Apache为Java提供的日志 ...

  4. 章节十五、7- 配置文件-Console Logging

    一.创建xml文件 1.创建xml文件 在项目中我们需要专门建一个文件夹来放xml文件或者是其它文件. 2.然后对文件夹进行命名 3.选择new  其它 4.选择XML File 5.给xml文件命名 ...

  5. 章节十五、8-配置文件File Logging

    一.如何将log输出到文件中? 1.配置xml文件 <?xml version="1.0" encoding="UTF-8"?> <Confi ...

  6. 章节十五、3-对象仓库、Page Factory实例应用

    一.如何创建对象仓库 package pageclasses; import org.openqa.selenium.WebDriver; import org.openqa.selenium.Web ...

  7. 章节十五、6-log4 2-用默认的配置

    一.实例演示 package log4jtutorial; import org.apache.logging.log4j.LogManager; import org.apache.logging. ...

  8. 章节十五、2-PageObjectModel

    一.在实现自动化过程中,会有很多重复的代码,我们在维护代码时会很困难,如果想解决这个问题,我们就需要使用PageObjectModel(页面对象模型)的方式来进行自动化代码的书写. 二.案例演示 以该 ...

  9. Ionic3学习笔记(十五)自定义 tab icon

    本文为原创文章,转载请标明出处 美工做了一套 icon,自然是要用的.将 icon copy 到 assets 文件夹下. 例如 .icon-ios-home-custom 为 iOS icon 选中 ...

随机推荐

  1. ~~函数基础(二):返回值&作用域~~

    进击のpython 函数的返回值和作用域 上文我们讲到了函数的基础--参数的相关问题 举的例子也都是带有print的函数定义 但是有个问题就出现了:我不想打印这个函数处理后的参数 我想拿到这个参数然后 ...

  2. Linux关闭进程。

    一.shell命令根据端口后关闭指定进程. $(netstat -nlp | | awk '{print $7}' | awk -F"/" '{ print $1 }') nets ...

  3. C语言指针学多了,你为什么会觉得晕?

    对于C语言中的指针概念,如果我告诉你,它是一个地址变量,你听了一头雾水,"地址?啥意思?"见你不理解,我说的详细点"指针变量跟其他变量一样,存储的是一个地址". ...

  4. [1045] PDOException in Connection.php line 295

    tp5实现登录功能时报错 在使用tp5框架实现登录功能的时候,点击login出现了 [1045] PDOException in Connection.php line 295 这个问题, 报错是 S ...

  5. [Linxu] Ubuntu下载mysql

    //下载: sudo apt install mysql-server sudo apt install mysql-client sudo apt install libmysqlclient-de ...

  6. springboot简单入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  7. [leetcode] 67. Add Binary (easy)

    原题链接 思路: 用一个数保存进制,从后往前不断pop出两个数字和进制数相加,放入返回值中. var addBinary = function(a, b) { var arrA = a.split(' ...

  8. Java程序员注意——审查Java代码的六种常见错误

    代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效.由于代码审查本身所针对的对象,就是俯瞰整个代码在测试过程中的问题和Bug.并且,代码审查对消除一些特别细节的错误大有裨益,尤其是那 ...

  9. module中module.exports与exports的区别(转)

    转https://cnodejs.org/topic/55ccace5b25bd72150842c0a require 用来加载代码,而 exports 和 module.exports 则用来导出代 ...

  10. cookbook_类与对象

    1修改实例的字符串表示 可以通过定义__str__()和__repr__()方法来实现 class Pair: def __init__(self,x,y): self.x = x self.y = ...