log4j----slf4j---logback从知道到编写配置文件
明天要去学习的
1.学习springBoot的自动装配,并且知道spring是如何自动去加载log4j的流程
https://blog.csdn.net/satomiyo/article/details/100040235 log4j配置文件
了解日志-->slf4j的介绍-->log4j的介绍-->logback的介绍-->springboot中slf4j+log4j的使用-->springboot中slf4j+logback的使用
一、前言
我觉得能够加强自己的开发能力,首先必须学会去配置一些文件,而不是crud。在springBoot项目中,一般会有log4j.properties的配置文件,该配置文件是记录项目中的日志的配置信息。
日志是一个项目中必不可少的灵魂,没有日志的项目是没有灵魂的,因此掌握基础的日志编写是非常有必要的。
二、为什么需要日志
我们最开始使用的是System.out.prinlt()进行输出我们的调代码的信息,用来监控具有什么信息,System.out.println()其实是对业务无关的代码,这些对业务无关的代码都是对业务代码的一些intercupt。
我们必须要明确,日志不仅仅System.out.prinlt(s) ,s的信息,同时日志包括一些额外的上下文,上下文信息是非常重要的,这些信息具有 访问时间、对应的类、行、产生的线程等。因此日志功能可以总结如下功能。
日志功能: 调试代码、定位错误、信息统计
三、需要输出什么日志(我们需要什么日志信息)
在系统中应该包括sql日志、异常日志也叫error级别日志、业务日志info级别、调试日志是debug模式仅仅是在开发阶段进行开启的,用来调试track代码。
1.SQL日志:记录系统执行的sql语句。
2.异常日志:记录系统运行中发生的异常事件。
3.业务日志:记录系统运行过程,如用户的登录,操作记录。
四、日志系统可以为我们编写的日志提供什么功能?
你或许很好奇,日志系统能为我们提供什么日志的管理功能。
1)日志级别分类管理 track\debug\info...
2)可以配置日志输出file console gui html等等
3)可以提供日志的上下文信息
比如Log4j的介绍
Log4J(log for java)是我们常用的日志管理小助手,它是 Apache的 一个开源项目,我们可以通过这个小助手很方便的将日志信息输出到控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等,而且也能控制每一条日志的输出格式,并且设置每一条日志信息的级别,这样我们能够更加细致地控制日志的生成过程。最令人兴奋的就是,这些所有的配置都可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
五、Slf4j的介绍
在我们java应用中,我们会使用mysql作为数据库也可能使用sql server作为数据库,但是我们使用java的时候从来没有直接去调用mysql的接口,而是通过jdbc这个统一的访问去实现数据库的交互。
在日志介绍中具有如下的名词。
| 类似我们jdbc的抽象接口调用 | 常用的日志系统 (不同的数据库) |
| SLF4J | log4j\JUL\Jboss-logging\JCL\logBack\log4j2 |
我们如果直接使用log4j作为日志系统,当然也是可以的,只不过我们在代码中,可以是这样写的(仅仅是比如,并不是真实的方法)
log.doInfo("这是log4j的记录信息")如果使用logback或许是这样写的log.writeInfo("这个是logback的记录信息")
这些语句是存在java代码中的,如果我们后来因为log4j的性能不是很好或者不支持xx功能,需要更换为logback的日志系统,那么你就需要把log.doInfo的代码改为writeInfo。这样是万万不能的,因此就需要SLF4j提供一个统一的接口,那么更换日志系统,仅仅需要更换配置信息就可以,绑定驱动就可以。
六、log4j的使用
log4j是比较早期好用的日志系统,现在出现logback 、log4j2的日志系统,这些系统比log4j系统的性能好很多,但是logback\log4j2、log4j的作者好像是同一个人,因此先了解log4j的使用是使用其他的日志系统的前提了。
Log4j的类图,由此可知道有一个Configuration会生成Appender ,Appender中具有Layout

6.1 首先配置jar
如果使用springboot项目的话,springBoot从xx版本之后就会默认使用logback ,因此需要使用exclusion移除logback,加上log4j jar。spring-boot-starter-log4j是包括slf4j的jar的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.2.5.RELEASE</version>
</dependency>
6.2 写配置文件
在spring启动的时候,会去resouce中加载log的配置文件,有一个加载顺序,可以使用log4j.properties 。spring启动会去加载这个配置文件,然后生成对应的Appender对象。
Log4j.properties如何写?记录以下的知识内容。
1. 日志系统是具有三个域输出的,root根输出、logger匹配包以及设置对应包的appender对象、具体Appender对象。
## 需求任务,把sql查询的语句打印到文件中 sql文件 --> 把sql 操作insert update select分类进行打印
## 执行了什么接口,接口带了什么参数,返回了什么结果 打印到 access文件
#log4j.rootLogger = debug , filelog
#log4j.appender.filelog = org.apache.log4j.DailyRollingFileAppender
#appender.filelog.layout = org.apache.log4j.TTCCLayout
#log4j.appender.filelog.layout.File = sql.txt
#log4j.appender.filelog.layout.Append = true
### 配置根 ###
log4j.rootLogger = info,errorFile
### 配置logger
log4j.logger.com.xx.demo.service=Info,dailyRollingFile
log4j.additivity.com.xx.demo.service=false
log4j.logger.org.apache.ibatis=Info,dailyRollingFile
## 配置输出
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.Target = System.out
log4j.appender.console.layout.conversionPattern = %-d{yyyy-MM-dd } [ %t:%r ] - [ %p ] %M%n
## 根 定义 输出对象 , logger.对应的包 == 输出级别 , 输出对象的配置,配置中的一些值
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.File = logs/a.log
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold= INFO
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %F %-d{yyyy-MM-dd } [ %t:%r ] - [ %p ] %m%n
## 根 定义 输出对象 , logger.对应的包 == 输出级别 , 输出对象的配置,配置中的一些值
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorFile.File = logs/xx.log
log4j.appender.errorFile.Append = true
log4j.appender.errorFile.Threshold= info
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern = %-d{yyyy-MM-dd } [ %t:%r ] - [ %p ] %m%n
首先一个日志记录是必须要去匹配一个具体的输出对象的,首先会去logger是不是指定了对应的文件输出,如果没有指定那么就去log4j.rootLogger中查找输出对象,然后使用符合的对象。log4j.additivity.com.xx.demo.service=false //表示不向上传递,也就是说我找到了包指定的输出的文件,如果写false就不会去根里面去使用其他的了,如果默认写true,那么不仅仅会在指定的输出对象进行输出,而且还会在root配置的输出对象进行输出。
2.appender是输出对象,包括不同对应的类
- appenderName是日志输出位置的配置的命名
-
log4j.appender.appenderName = fully.qualified.name.of.appender.class中fully.qualified.name.of.appender.class应换上以下信息输出的目的地
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
appender具有layout的对象是定义输出格式的
- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
具体配置文件需要写什么我觉得下面这个网址介绍很全
https://blog.csdn.net/satomiyo/article/details/100040235 log4j配置文件
七、logback的配置文件
