Java日志组件介绍之二

一、前言

Java日志组件介绍之一 主要介绍了JDK内置日志和Apache的common-logging通用日志接口,今天这篇我们继续了解Java其它一些日志组件。

二、slf4j

  • slf4j即Simple Logging Facade for JAVA ,简单日志门面,类似common-logging,是对不同日志实现的封装。

  • slf4j-simple、logback都是slf4j的具体实现,log4j并不直接实现slf4j,但是有专门的一层桥接slf4j-log4j12来实现slf4j。

  • slf4j-simple、logback、slf4j-log4j12都有一个StaticLoggerBinder类实现了slf4j的LoggerFactoryBinder接口进行绑定。

1、依赖配置

pom.xml

其中slf4j-api是必须要添加,而slf4j-simple、logback-classic、slf4j-log4j12这三个包根据你的需要添加一个依赖即可,如果一起添加会有如下的警告信息,但系统会选择其中一个日志实现类。SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]

2、日志实现类配置文件

如果要使用log4j,需要添加log4j.properties配置,以下是一个log4j简单控制台输出日志配置

3、代码

注:使用的是slf4j的API。

4、使用的是哪一个具体实现关键源代码分析

通过LoggerFactory跟入代码

初始化方法

查找可能绑定的类文件

STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class"

就是去加载org/slf4j/impl/StaticLoggerBinder.class这个类,每个slf4j实现都会有这一个类。

三、log4j

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台或文件等,我们也可以控制每一条日志的输出格式。

Log4j组成

  • loggers:控制日志输出级别以及日志是否要输出

    日志级别:FATAL->ERROR->WARN->INFO->DEBUG

    ALL:打开所有日志记录、OFF:关闭所有日志。

  • Appenders:设置日志输出到控制台、文件等。

    ConsoleAppender:控制台

    FileAppender:文件

    DailyRollingFileAppender:每天生成一个新文件

    RollingFileAppender:输出到文件,指定文件大小,当超过文件大小时会产生一个新文件并把原来日志文件更名。

    JDBCAppender:将日志信息保存在数据库中。

  • Layout 控制日志信息的输出格式

    HTMLLayout:输出HTML格式

    SimpleLayout:输出简单格式

    PatternLayout:可以自定义格式输出日志。

1、依赖

2、代码

3、配置log4j.properties

4、日志输出格式定义

注:参考PatternLayout这个类的注解。

四、logback

logback是log4j作者写的另外一个日志组件,相比log4j有更好的性能.

logback三个组件

  • logback-core:提供了LogBack的核心功能,是另外两个组件的基础。

  • logback-classic:实现了Slf4j的API,所以当想配合Slf4j使用时,需要引入logback-classic。

  • logback-access:为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。

logback一般都是与slf4j整合使用,logback包中也有一个StaticLoggerBinder来实现与slf4j的绑定。

1、依赖配置

2、logback.xml

如果项目中不配置logback.xml则使用默认配置,只会输出日志到控制台。

3、代码

注:调用slf4j的接口进行日志打印。

4、Springboot配置logback

SpringBoot默认的日志组件就是logback,只要引入spring-boot-start就会把logback依赖引入,如果没logback配置文件,则会直接使用默认的org.springframework.boot.logging.logback.base.xml,默认日志输出级别为INFO

注:Spring引入spring-boot-start还会引入slf4j、log4j(这个不知道为什么加载进来?).

5、异步日志配置

异步日志在输出的时候不会直接输出日志到磁盘,而是将日志存进一个队列里,另外会起一个线程消费队列里的日志将其写入磁盘。

AsyncAppenderBase原理

1、将日志数据放到队列中

2、从队列中取出数据写到磁盘

注:我们项目中其实一直没有配置异步日志。

五、Log4j2

这就是前几天爆出安全漏洞的日志组件,下一篇具体分析。

相关推荐
鲤籽鲲几秒前
C# Random 随机数 全面解析
android·java·c#
zquwei20 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇26 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦1 小时前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟2 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi