《手把手教你》系列基础篇(九十一)-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实时生图绘板
相关文章
|
10月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
890 0
|
11月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
9月前
|
监控 测试技术 API
n8n自动化测试教程 (1):环境搭建与初识n8n
n8n是一款开源、可视化的工作流自动化工具,测试工程师可通过拖拽节点快速构建API测试流程,实现测试编排、数据管理、自动化监控与告警等功能,提升测试效率与覆盖率。
|
9月前
|
安全 Shell 持续交付
Debian Apache 自动化部署教程:4 种方法,从个人到企业批量装机
本文介绍在 Debian 系统中实现 Apache 自动化部署的 4 种实用方法,涵盖个人单机与企业批量部署场景。内容包括使用 Bash 脚本一键安装、通过 PXE 实现网络批量部署、借助 Ansible/Puppet 进行多机统一配置管理,以及利用 Preseed 文件自动完成安装配置。文章还提供操作示例与避坑建议,帮助用户提升部署效率,降低人为错误。
266 0
|
11月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
367 0
|
11月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
518 31
Selenium IDE:Web自动化测试的得力助手
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
1341 17
Selenium:强大的 Web 自动化测试工具