《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

简介: 【7月更文挑战第9天】在Java项目中,使用Logback配置可以实现日志按照不同包名输出到不同的文件,并且根据日志级别分开记录。

1.简介

为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志;(2)不同日志级别:调试、信息、警告和错误等也要分文件输出。所以宏哥今天主要介绍和分享的是:使用logback输出日志到不同文件。废话不说直入主题。

2.第一种方法:根据包输出

根据包输出,通过logger的name属性指定不同的包,具体步骤如下:

1. 创建不同包下的两个类

2. 在logback(-test).xml中添加

3. 测试方法

2.1创建不同包

1.创建不同包并在包下新建类ADao和BService。如下图所示:

(1)ADao

(2)BService

2.参考代码

(1)ADao.java

package dao;


import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.Logger;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

*

* 2022年3月29日

*/


public class ADao {  

   static final Logger log = (Logger) LoggerFactory.getLogger(ADao.class);  

     

   public void queryADao() {  

       log.debug("query queryADao start...");  

       log.error("An error occurred during the query");  

       log.debug("query queryADao end...");  

   }  

}  

(2)BService.java

package service;


import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.Logger;

import dao.ADao;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

*

* 2022年3月29日

*/


public class BService {

   

   static final Logger log = (Logger) LoggerFactory.getLogger(BService.class);  

   ADao ad = new ADao();

   public void bObligate() {  

       log.debug("bObligate start...");

       ad.queryADao();

       log.error("An error occurred during the progress");  

       log.debug("bObligate end...");  

   }  

}  

2.2logback.xml

1.新建logback.xml文件,而且在logback.xml中添加如下图所示内容:

2.参考代码

xml version="1.0" encoding="UTF-8"?>  

 

<configuration>  

   <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

       <file>./logs2/bribery.logfile>  

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

           <fileNamePattern>/logs2/bribery-%d{yyyy-MM-dd}.logfileNamePattern>  

       rollingPolicy>  

       <encoder>  

           <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%npattern>  

       encoder>  

   appender>  

     

   <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

       <file>./logs2/venality.logfile>  

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

           <fileNamePattern>./logs2/venality-%d{yyyy-MM-dd}.logfileNamePattern>  

       rollingPolicy>  

       <encoder>  

           <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%npattern>  

       encoder>  

   appender>  

     

   <logger name="service.BService" level="DEBUG" additivity="false">  

       <appender-ref ref="serviceAppender" />  

   logger>  

     

   <logger name="dao.ADao" level="DEBUG" additivity="false">  

       <appender-ref ref="daoAppender" />  

   logger>  

     

     

   <root level="DEBUG">  

       <appender-ref ref="rollingAppender" />  

   root>  

configuration>

2.3测试方法

1.新建测试类。如下图所示:

2.参考代码

import service.BService;


/**

* @author 北京-宏哥

*

* @公众号:北京宏哥

*

* 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

*

* 2022年3月29日

*/


public class testLogback {

   

   public static void main(String[] args) {

       

       BService bs = new  BService();

       bs.bObligate();

   }


}

2.4运行测试方法

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.输出的日志文件,如下图所示:

3.第二种方法:根据日志级别输出

在这里宏哥把所有级别为ERROR的日志输出到一个文件中。

这里宏哥还是延续使用上边的代码,只需要一个劲的修改logback.xml文件的内容即可!

3.1加入过滤器

1.修改logback(-test).xml文件:在serviceAppender和daoAppender都加入以下级别过滤器,这样错误日志就不会在bribery.log和venality.log中打印了,代码如下:

<filter class="ch.qos.logback.classic.filter.LevelFilter">  

   <level>ERRORlevel>  

   <onMatch>DENYonMatch>  

   <onMismatch>ACCEPTonMismatch>  

filter>

3.2新建一个appender

1.新建一个错误日志的appender,代码如下:

<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

   <file>/logs/error.logfile>  

   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

       <fileNamePattern>/logs/venality-%d{yyyy-MM-dd}.logfileNamePattern>  

   rollingPolicy>  

   <encoder>  

       <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%npattern>  

   encoder>  

   <filter class="ch.qos.logback.classic.filter.LevelFilter">  

       <level>ERRORlevel>  

       <onMatch>ACCEPTonMatch>  

       <onMismatch>DENYonMismatch>  

   filter>  

appender>

3.2加上errorAppender

在name为dao.ADao和service.BService的logger都加上errorAppender,代码如下:

<appender-ref ref="errorAppender" />

3.4完整的logback.xml文件

1.修改完成的logback.xml文件,如下图所示:

2.参考代码

xml version="1.0" encoding="UTF-8"?>  

 

<configuration>  

   <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

       <file>./logs3/bribery.logfile>  

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

           <fileNamePattern>/logs3/bribery-%d{yyyy-MM-dd}.logfileNamePattern>  

       rollingPolicy>  

       <encoder>  

           <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%npattern>  

       encoder>

       <filter class="ch.qos.logback.classic.filter.LevelFilter">  

           <level>ERRORlevel>  

           <onMatch>DENYonMatch>  

           <onMismatch>ACCEPTonMismatch>  

       filter>          

   appender>  

     

   <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

       <file>./logs3/venality.logfile>  

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

           <fileNamePattern>./logs3/venality-%d{yyyy-MM-dd}.logfileNamePattern>  

       rollingPolicy>  

       <encoder>  

           <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%npattern>  

       encoder>  

       <filter class="ch.qos.logback.classic.filter.LevelFilter">  

           <level>ERRORlevel>  

           <onMatch>DENYonMatch>  

           <onMismatch>ACCEPTonMismatch>  

       filter>  

   appender>  

   <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  

       <file>./logs3/error.logfile>  

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  

           <fileNamePattern>/logs3/venality-%d{yyyy-MM-dd}.logfileNamePattern>  

       rollingPolicy>  

       <encoder>  

           <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%npattern>  

       encoder>  

       <filter class="ch.qos.logback.classic.filter.LevelFilter">  

           <level>ERRORlevel>  

           <onMatch>ACCEPTonMatch>  

           <onMismatch>DENYonMismatch>  

       filter>  

   appender>  

   <logger name="service.BService" level="DEBUG" additivity="false">  

       <appender-ref ref="serviceAppender" />  

       <appender-ref ref="errorAppender" />  

   logger>  

     

   <logger name="dao.ADao" level="DEBUG" additivity="false">  

       <appender-ref ref="daoAppender" />  

       <appender-ref ref="errorAppender" />  

   logger>  

     

     

   <root level="DEBUG">  

       <appender-ref ref="rollingAppender" />  

   root>  

configuration>

3.5运行测试方法

1.修改完成后,运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.输出的日志文件,如下图所示:

从上图可以看出:service和dao的错误日志都打印到error.log文件中了。

4.小结

 好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!



每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):


Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
9月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
1366 4
|
8月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
461 10
|
7月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
564 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
11月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1553 23
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2062 24
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
1177 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
978 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
662 2
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。