1、介绍和区别:

Log4j是Apache的一个开放源代码项目,作用有:①将日志信息输送到控制台、文件等;②控制每一条日志的输出格式;③通过定义每一条日志信息的级别,更加细致的控制日志的生成过程;该日志方式可以通过配置文件来灵活配置。
slf4j是简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。

SLF4J和各个具体的日志系统进行绑定时的框架原理图:

1)综上所述:
slf4j-api提供日志接口,slf4j-log4j提供logj的具体实现。也就是 slf4j只是一个日志标准,并不是日志系统的具体实现,如果项目只有slf4j的包是没有办法实现日志功能的。
2)其结构如下:
slf4j-api(接口层)
|
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
|
各日志实现包
3)结合各日志实现包使用时提供的jar包情况为:

  • SLF4J和logback结合使用时需要提供的jar:slf4j-api.jar,logback-classic.jar,logback-core.jar
  • SLF4J和log4j结合使用时需要提供的jar:slf4j-api.jar,slf4j-log412.jar,log4j.jar
  • SLF4J和JDK中java.util.logging结合使用时需要提供的jar:slf4j-api.jar,slf4j-jdk14.jar
  • SLF4J和simple(SLF4J本身提供的一个接口的简单实现)结合使用时需要提供的jar:slf4j-api.jar,slf4j-simple.jar

4)自定义日志配置
根据不同的日志系统,可以按如下规则组织配置文件名,就能被正确加载:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项。
默认的命名规则,并且放在 src/main/resources 下面即可

2、log4j的配置使用

log4j是apache提供的日志管理工具,主要是用来维护、调试程序的日志信息,便于用户跟踪程序执行过程。功能类似于java本身的系统输出,System.out.println(),使用log4j工具可以更好地管理日志,通过配置文件的配置来决定日志的输出。
log4j有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)

1、Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等;其中级别有五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL

2、Appender:通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标;

3、Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。
项目中的log4j.properties配置文件配置如下:

# Output pattern : date [thread] priority category - message   FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7
log4j.rootLogger=INFO, Console#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%d %-5p]:%m%n#SQL Logger
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.PreparedStatement=INFO#Project defalult level
log4j.logger.com.cmb=INFO

①第一行配置为根配置,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
把指定级别以上的日志信息输出到指定的一个或者多个位置
上述配置即INFO层级以及以上的信息输出到Console(控制台),配置为info这样只显示INFO, WARN, ERROR的日志信息
②第二行是指定日志输出的类型。
可选参数如下:

  • org.apache.log4j.ConsoleAppender(控制台)
  • org.apache.log4j.FileAppender(文件)
  • org.apache.log4j.DailyRollingFileAppender(每隔一段时间产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

③第三行是指定日志输出的格式。
可选参数如下:

  • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
  • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    ④第四行是配合第三行设置,对日志输出进行格式化设置。
    格式化参数说明如下:
  • %m 输出代码中指定的消息。
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
  • %r 输出自应用启动到输出该log信息耗费的毫秒数。
  • %c 输出所属的类目,通常就是所在类的全名。
  • %t 输出产生该日志事件的线程名。
  • %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”。
  • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}。
  • %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
  • %%: 输出一个"%"字符。
  • %F: 输出日志消息产生时所在的文件名称。
  • %L: 输出代码中的行号。

⑤#SQL Logger部分是使用log4j输出sql的配置

3、logback的配置使用

logback是Java的日志开源组件,是apache创始人编写的,相比log4j而言,性能更好。
1)logback主要有三个模块组成:(通过依赖这三个模块实现的)

  • logback-core // 基础模块,其他模块基于此
  • logback-classic // 它是log4j的一个改良版本,同时它完整实现了slf4j API,因此可以很方便的更换成其它日志系统,如log4j
  • logback-access // 访问模块与Servlet容器集成提供通过Http来访问日志的功能
    2)配置的详细介绍
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根节点 配置文件修改时重新加载,默认true -->
<configuration scan="true"><!-- 设置上下文名称,区分不同的日志记录--><contextName>myAppName</contextName><!--设置变量。定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="CATALINA_BASE" value="**/logs"></property><!-- 子节点 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder charset="UTF-8"><!-- 输出日志记录格式 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 第一个文件输出,每天产生一个文件 --><appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 输出文件路径+文件名 --><fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.log</fileNamePattern><!-- 保存30天的日志 --><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><!-- 输出日志记录格式 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 第二个文件输出,每天产生一个文件 --><appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${CATALINA_BASE}/bb.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${CATALINA_BASE}/custom.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.log</fileNamePattern><!-- keep 30 days' worth of history --><maxHistory>30</maxHistory></rollingPolicy><encoder charset="UTF-8"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 子节点 设置日志输出级别 --><root level="ERROR"><appender-ref ref="CONSOLE" /></root><logger name="file1" level="DEBUG"><appender-ref ref="FILE1" /></logger><logger name="file1" level="INFO"><appender-ref ref="FILE2" /></logger><!-- 子节点 自定义logger --><logger name="custom" level="INFO"><appender-ref ref="CUSTOM" /></logger>
</configuration>

3)配置xmind说明

参考:logback 常用配置(详解)

日志系统的介绍和使用相关推荐

  1. mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统

    原标题:源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统 作者介绍 张永翔,现任网易云RDS开发,持续关注MySQL及数据库运维领域,擅长MySQL运维,知乎ID:雁南归. MySQL ...

  2. 卫星系统——酒店后端全链路日志收集工具介绍

    背景 随着酒店业务的高速发展,我们为用户.商家提供的服务越来越精细,系统服务化程度.复杂度也逐渐上升.微服务化虽然能够很好地解决问题,但也有副作用,比如,问题定位. 每次问题定位都需要从源头开始找同事 ...

  3. 日志系统新贵Loki,确实比笨重的ELK轻

    来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...

  4. cx_oracle写日志信息_日志系统的设计

    笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...

  5. 抛弃ELK!Loki日志系统详解!

    背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...

  6. 百亿级日志系统架构设计及优化

    作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...

  7. PHP框架中的日志系统

    引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...

  8. 几十条业务线日志系统如何收集处理?

    在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息,甚至包括点击的位置,我们也经常发现自己刚搜完一个东西,再打开网页时每个小广告都会出现与之相关联的商品或信息,在感叹智能的同时不惊想 什 ...

  9. 大型互联网应用中的日志系统

    2019独角兽企业重金招聘Python工程师标准>>> 大型互联网应用的突出特点是应用本身规模大,结构复杂,用户访问量大.设计良好的日志系统,有助于分析流量趋势,帮助管理网络应用:有 ...

最新文章

  1. 【本质】你知道C语言编译的过程吗?
  2. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  3. Leetcode 242.有效的字母异位词(哈希表)
  4. windows tcp端口占满_TCP与UDP分析、三次握手四次断开、DDOS
  5. 安装PaddleOCR遇到ERROR: Command errored out with exit status 1:command: ‘f:\python3.7\python.exe‘ -u -c
  6. SQL_SERVER 导oracle(转)
  7. anaconda 清华镜像及对应下载
  8. 电脑桌面云便签怎么登录便签账号?
  9. 计算机网络设备维修会计分录,设备维修记录什么会计科目
  10. 苹果计算机如何显示错误,科普电脑打开苹果手机视频教程及Apple ID验证失败发生未知错误怎么解决...
  11. Vue移动端系列 => [06] 文章搜索
  12. 免费免安装!3s 获取云数据库,MySQL,Mongo、Redis 全都有!
  13. 心跳机制 heartbeat
  14. requireJS常用用法
  15. FlatList ListHeaderComponent 频繁刷新
  16. 用 Python 通过雅虎财经获取股票数据
  17. Java Base64加密解密编码解码
  18. Cloudreve免费开源网盘系统源代码Cloudreve公私兼备网盘系统 多功能仿百度网盘源码+免费分享
  19. 计算机 名片,计算机版本的名片识别软件
  20. 矩阵求导(分母布局与分子布局),以及常用的矩阵求导公式

热门文章

  1. java毕业设计汽车4S服务管理系统(附源码、数据库)
  2. PDF转Word怎么调整格式?这个方法轻松解决
  3. 探店通系统源码,短视频矩阵源码,抖音矩阵系统源码。
  4. linux下使用libmad库实现mp3文件的解码、播放
  5. 脉脉风格网名自动生成器
  6. 诊所预约管理系统-电子病例功能
  7. CSS-块级元素和行内元素
  8. 光盘 显示0字符 无法读取文件的修复方法!!
  9. 电脑更新能按f8修复计算机,如何让Win7系统开机时按F8出现修复计算机选项
  10. 小米5s升级android7.0,官方回应 小米5s升级安卓7.0还要再等等