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年多整理出这一份全网超详细的入门到精通教程