《手把手教你》系列基础篇(九十一)-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工具基础使用教程

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
7月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
331 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
11月前
|
监控 数据挖掘 数据安全/隐私保护
Python脚本:自动化下载视频的日志记录
Python脚本:自动化下载视频的日志记录
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
199 3
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
11月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
176 0
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。