日志

日志门面(抽象层) 日志实现
JCL
SLF4j
Jboss-logging
JUL
log4j
log4j2
logback

Spring默认JCL

SpringBoot中默认选择的搭配是:slf4j+logback

第一章-log4日志

1简介

是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。

简介的网址

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 #配置根Logger
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …

#配置日志信息输出目的地Appender
log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
  log4j.appender.appenderName.option1  =  value1 
  … 
  log4j.appender.appenderName.optionN  =  valueN 

#配置日志信息的格式(布局)
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
  log4j.appender.appenderName.layout.option1  =  value1 
  … 
  log4j.appender.appenderName.layout.optionN  =  valueN 

1.1配置根Logger

配置根:appenderName1是别名

其中 [level] 是日志输出级别,共有5级:

1
2
3
4
5
FATAL   0 
ERROR   3 
WARN    4 
INFO    6 
DEBUG   7 

1.2日志输出目的地Appender

Appender 为日志输出目的地,Log4j提供的appender有以下几种:

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

Layout:日志输出格式,Log4j提供的layout有以下几种:

1
2
3
4
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 %m   输出代码中指定的消息
  %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   输出自应用启动到输出该log信息耗费的毫秒数 
  %c   输出所属的类目,通常就是所在类的全名 
  %t   输出产生该日志事件的线程名 
  %n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
  %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
  			比如:%d{yyy MMM dd HH:mm:ss , SSS}
  			输出类似:2002年10月18日  22 : 10 : 28 , 921  
  %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
  			举例:Testlog4.main(TestLog4.java: 10 ) 

2使用

1导入jar

1
2
3
4
5
6
<!--log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=F:/IntelliJ_IDEA_project/log4jFile/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern= %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3java类中使用

image-20200322151211326

一般出现exception后使用,logger.info/error()

3日志级别

Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug

image-20200322151323850

4SpringBoot中使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  <!-- configure logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <scope>runtime</scope>
        </dependency>

第二章-slf4j/logback日志

日志门面(抽象层) 日志实现
JCL
SLF4j
Jboss-logging
JUL
log4j
log4j2
logback

Spring默认JCL

SpringBoot中默认选择的搭配是:slf4j+logback

1、slf4j使用

slf4j网站http://www.slf4j.org/manual.html

系统有多日志解决:https://www.bilibili.com/video/BV1gW411W76m?p=23

在java类中使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.trace("Hello World");
    logger.debug("Hello World");
    //springBoot默认info级别,info及以上级别才会生效
    logger.info("Hello World");
    logger.warn("Hello World");
    logger.error("Hello World");
  }
}

SpringBoot日志设置

application.properties设置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
logging.level.限定包中的类com=trace级别

#指定盘符和位置如 F:/springboot.log,指定路径。 注意:path和name只生效一个,默认生效name
logging.file.path=

#在当前项目下生成springboot.log日志,指定名称
logging.file.name=springboot

#指定控制台/文件中生成格式
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%-51eve1 :级别从左显示5个字符宽度
%logger{50}表示1ogger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
#logging.pattern.console='%d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n' 
#logging.pattern.file=