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

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. android_sdcard读写(二)

    接着上篇,继续研究sdcard的神秘之处.上篇代码不变,本篇新增代码都在下面~~~ 继续上代码~~ // 写文件 File path = new File("/mnt/sdcard/sxp/ ...

  2. linux server 发送邮件

    用linux服务器发送邮件centos1.安装mailx 和sendmail,系统一般会安装的yum -y isntall mailx sendmail 2.修改/etc/mail.rcset fro ...

  3. springcloud-高可用部署

    1.场景描述 前端时间只简单介绍了下springcloud的高可用方案(springcloud高可用方案),今天详细介绍下如何实施springcloud的高可用部署. 2.解决方案 2.1 架构方案 ...

  4. 【题解】跳房子-C++

    Description奶牛按不太传统的方式玩起小朋友玩的跳房子游戏,现给出一个5*%的由数字组成的网格.它们在格子中向前前跳,向后跳,向左跳,向右跳,跳到网格中另一个数字后,又这样继续跳(可能跳到某个 ...

  5. python 3.5学习笔记(第四章)

    本章内容: 一..装饰器 二.生成器 三.迭代器 四.python中的内置方法 五.json & pickle 的数据序列化及反序列化 六.程序目录结构规范 七.补充内容 一.装饰器: 1.概 ...

  6. github访问不到,登陆不上

    为github添加host C:\WINDOWS\System32\drivers\etc 在host文件添加如下两行 192.30.253.112 github.com 151.101.113.19 ...

  7. WePY的脱胎换骨

    对于前端来说,尤其是开发小程序的前端来说,WePY框架一定不陌生,他是一种小程序开发框架.而且是属于类Vue风格,掌握Vue再来学习WePY学习成本极低. 今天为啥要写这篇文章呢,因为在复习WePY时 ...

  8. David与Vincent的博弈游戏[树型DP]

    \(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...

  9. pyqt 主程序运行中处理其他事件(多线程的一种代替方式)

    一.实验环境 1.Windows7x64_SP1 2.Anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 4.通过Anacond ...

  10. 【Java高级】(一)JVM

    5.2.1.在Java中如何判断对象已死? 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能被使用的 ...