《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-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

java 复制代码
package dao;

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
 *
 * 2025年3月09日
 */

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

java 复制代码
package service;

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import dao.ADao;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
 *
 * 2025年3月09日
 */

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 复制代码
<?xml version="1.0" encoding="UTF-8"?>  
  
<configuration>  
    <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <file>./logs2/bribery.log</file>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>/logs2/bribery-%d{yyyy-MM-dd}.log</fileNamePattern>  
        </rollingPolicy>  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>  
        </encoder>  
    </appender>  
      
    <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <file>./logs2/venality.log</file>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>./logs2/venality-%d{yyyy-MM-dd}.log</fileNamePattern>  
        </rollingPolicy>  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>  
        </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 -->  
    <root level="DEBUG">  
        <appender-ref ref="rollingAppender" />  
    </root>  
</configuration>  

2.3测试方法

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

2.参考代码

typescript 复制代码
import service.BService;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
 *
 * 2025年3月09日
 */

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中打印了,代码如下:

xml 复制代码
<filter class="ch.qos.logback.classic.filter.LevelFilter">  
    <level>ERROR</level>  
    <onMatch>DENY</onMatch>  
    <onMismatch>ACCEPT</onMismatch>  
</filter>  

3.2新建一个appender

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

xml 复制代码
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
    <file>/logs/error.log</file>  
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
        <fileNamePattern>/logs/venality-%d{yyyy-MM-dd}.log</fileNamePattern>  
    </rollingPolicy>  
    <encoder>  
        <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%n</pattern>  
    </encoder>  
    <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->  
        <level>ERROR</level>  
        <onMatch>ACCEPT</onMatch>  
        <onMismatch>DENY</onMismatch>  
    </filter>  
</appender>  

3.3加上errorAppender

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

csharp 复制代码
<appender-ref ref="errorAppender" />  

3.4完整的logback.xml文件

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

2.参考代码

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>  
  
<configuration>  
    <appender name="serviceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <file>./logs3/bribery.log</file>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>/logs3/bribery-%d{yyyy-MM-dd}.log</fileNamePattern>  
        </rollingPolicy>  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>  
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>ERROR</level>  
            <onMatch>DENY</onMatch>  
            <onMismatch>ACCEPT</onMismatch>  
        </filter>          
    </appender>  
      
    <appender name="daoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <file>./logs3/venality.log</file>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>./logs3/venality-%d{yyyy-MM-dd}.log</fileNamePattern>  
        </rollingPolicy>  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>  
        </encoder>  
        <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>ERROR</level>  
            <onMatch>DENY</onMatch>  
            <onMismatch>ACCEPT</onMismatch>  
        </filter>  
    </appender>  
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <file>./logs3/error.log</file>  
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
            <fileNamePattern>/logs3/venality-%d{yyyy-MM-dd}.log</fileNamePattern>  
        </rollingPolicy>  
        <encoder>  
            <pattern>%d{HH:mm:ss.SSS} %thread %X{invokeNo} %logger{40} %msg%n</pattern>  
        </encoder>  
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->  
            <level>ERROR</level>  
            <onMatch>ACCEPT</onMatch>  
            <onMismatch>DENY</onMismatch>  
        </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 -->  
    <root level="DEBUG">  
        <appender-ref ref="rollingAppender" />  
    </root>  
</configuration>  

3.5运行测试方法

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

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

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

4.小结

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

相关推荐
码农小灰2 分钟前
Java 8 Stream API 入门到实践详解
java·java案例
步、步、为营7 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
cui_hao_nan10 分钟前
设计模式——模板方法
java·设计模式
小吕学编程11 分钟前
HttpServletRequest常用方法
java·http
在未来等你11 分钟前
Java并发编程实战 Day 11:并发设计模式
java·设计模式·多线程·并发编程·threadlocal·生产者消费者·读写锁
李少兄23 分钟前
解决 idea提示`SQL dialect is not configured` 问题
java·sql·intellij-idea
BreezeDove29 分钟前
IDEA安装&迁移IDEA配置数据位置
java·ide·intellij-idea
太阳之神aboluo34 分钟前
压测软件-Jmeter
java·运维·jmeter
编程乐学(Arfan开发工程师)1 小时前
42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配
java·spring boot·后端·测试工具·lua·postman
珹洺1 小时前
数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
java·数据库·sql·安全·oracle