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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【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工具基础使用教程

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
13天前
|
敏捷开发 Java 测试技术
探索软件测试中的自动化测试框架
在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的不断进步和软件项目的日益复杂化,传统的手动测试方法已经无法满足高效、准确的测试需求。自动化测试作为一种提高测试效率和质量的有效手段,越来越受到开发者和测试者的青睐。本文将深入探讨自动化测试框架的重要性、常见的自动化测试工具以及如何选择合适的自动化测试框架。
37 10
|
15天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
41 6
|
15天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
40 4
|
14天前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
34 1
|
20天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
21天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
64 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9天前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
29 6
|
5天前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####
|
5天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
14 1
|
20天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####