为什么项目中使用 slf4j 而不是Log4j ?
为什么项目中使用 slf4j 而不是Log4j ?
Log4j(有漏洞)--->Logback --->Log4j 2 日志框架的实现(都是 apache 开源组织的写的)
SpringBoot中推荐使用Logback日志框架。默认采用Logback来实现日志处理。
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
Logback(日志框架)implement 实现了 slf4j(简单日志门面框架)抽象类接口

slf4j不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,slf4j是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
可以将Log4j看成是一个完整的日志库,而slf4j是一个日志库的规范接口。
slf4j提供了基于占位符的日志方法,减少了在String拼接时的性能开销问题。
slf4j日志 (Simple Loging Facade For Java)
slf4j 是一个为 Java 程序提供日志输出的统一接 口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不 能工作的,必须搭配其他具体的日志实现方案,比如 apache的org.apache.log4j.Logger,jdk 自带 的java.util.logging.Logger 等。
Log4j日志
Log4j 是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、 文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控 制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j 由三个重要的组成构成
日志记录器(Logger) :控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制
输出端(Appenders) : 指定了日志将打印到控制台还是文件中
日志格式化器(Layout) : 控制日志信息的显示格式
Logback
Logback 主要由三个模块组成:
1.logback-core 是其它模块的基础设施,其它模块基于它构建,显然,logback-core 提供了一些关键的通用机制。
2.logback-classic 的地位和作用等同于 Log4J,它也被认为是 Log4J 的一个改进版,并且它实现了简单日志门面 SLF4J;
3.logback-access 主要作为一个与 Servlet 容器交互的模块,比如说 tomcat 或者 jetty,提供一些与 HTTP 访问相关的功能。
ELK 是软件集合 Elasticsearch、Logstash、Kibana 的简称
由这三个软件及其相关的组件可以打 造大规模日志实时处理系统:
1.Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。
2.Logstash 是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。
3.Kibana 是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展现给业务方,比如各类饼图、直方图、区域图等。
log4j.properties日志配置文件
##设置日志记录到控制台的方式
log4j.appender.std=org.apache.log4j.ConsoleAppender
log4j.appender.std.Target=System.err
log4j.appender.std.layout=org.apache.log4j.PatternLayout
log4j.appender.std.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
##设置日志记录到文件的方式
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=mylog.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
##日志输出的级别,以及配置记录方案
log4j.rootLogger= debug,std,file
##级别:error > warn > info>debug>trace
##开发阶段: log4j.rootLogger= debug,std,file
##上线之后: log4j.rootLogger= error,file
AI写代码
