1.简介
今天讲解和分享这篇文章主要是由于log4j2前段时间新闻发现 Apache Log4j2 近日被公开的远程代码执行漏洞在全球引起了重大影响:https://www.oschina.net/news/172999,因此可以用logback日志框架替换一下。slf4j是Java的简单日志门面API,很多日志实现都可以与之集成,如JDK logging (java.util.logging), log4j和logback。优点是代码里不会有具体的日志实现类,减少侵入。与log4j相比,logback具有一些优势,如更好的性能、更少的内存使用、自动重加载配置文件以及过滤功能等。
2.Logback简介
Logback 是由 log4j 创始人设计的又一个开源日志组件,作为流行的 log4j 项目的后续版本,从而替代 log4j。
logback一个开源日志组件
logback性能是log4j性能的10倍以上
logback的配置,需要配置输出源appender,打日志的loger(子节点)和root(根节点),实际上,它输出日志是从子节点开始,子节点如果有输出源直接输入,如果无,判断配置的addtivity,是否像上级传递,即是否向root传递,传递则采用root的输出源,否则不输出日志。
Logback 的体系结构足够通用,以便在不同情况下应用。 目前,logback 分为三个模块:logback-core,logback-classic和logback-access。
logback-core:模块为其他两个模块的基础。
logback-classic:模块可以被看做是log4j的改进版本。此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。
logback-access:模块与 Servlet 容器(如 Tomcat 和 Jetty)集成,以提供 HTTP 访问日志功能。
3.配置文件
Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
Appender:主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
Layout 负责把事件转换成字符串,格式化的日志信息的输出。
4.准备演示环境
4.1准备工作
1.下载logback的jar包地址:https://logback.qos.ch/download.html 宏哥可以通过下载地址下载版本是1.2.9。如下图所示:
(1)logback-access-1.1.9.jar
(2)logback-classic-1.1.9.jar
(3)logback-core-1.1.9.jar
2.下载slf4j-api的jar包地址:https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/ 宏哥可以通过下载地址下载版本是1.7.25。如下图所示:
3.下载好了之后,将jar包添加到Eclipse项目中去。如下图所示:
4.在当前项目新建一个logback.xml的文件,如下图所示:
5.项目实战
5.1日志输出到控制台
1.新建logback.xml或logback-test.xml(优先级高)文件中添加如下图所示内容:
2.logback.xml参考代码
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder的默认实现类是ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
</encoder>
</appender>
<!-- name值可以是包名或具体的类名:该包(包括子包)下的类或该类将采用此logger -->
<logger name="testSuites.TestLogback" level="INFO">
<appender-ref ref="STDOUT" />
</logger>
<!-- root的默认level是DEBUG -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.新建一个测试类:TestLogback,测试日志输出到控制台。
5.2代码设计
5.3参考代码
代码语言:javascript复制package testSuites;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
/**
* @author 北京-宏哥
*
* @公众号:北京宏哥
*
* 《手把手教你》系列基础篇(八十九)-java selenium自动化测试-框架设计基础-Logback实现日志输出(详解教程)
*
* 2022年3月26日
*/
public class TestLogback {
private static final Logger log = (Logger) LoggerFactory.getLogger(TestLogback.class);
public void reconciliate() {
String name = "conciliate";
log.info("Hello from reconciliate");
log.debug("My name is {}", name);
}
public static void main(String[] args) {
TestLogback t = new TestLogback();
t.reconciliate();
}
}
5.4运行代码
1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:
从上图可以看出控制台中的reconciliate中的日志会打印两次,这是因为所有logger的始祖是ROOT,默认会继承ROOT的配置。
解决:logger的additivity属性设置为false
2.修改后运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:
从上图可以看出控制台中的reconciliate中的日志打印了一次,问题解决了。
6.小结
下载的logback各类jar版本需一致。
好了,时间也不早了,今天就分享和讲解到这里,希望对您有所帮助,感谢您耐心地阅读!