引入

在我们平常练习时,可能使用的就是stdout的经典输出测试了,在小问题不值得debug(其实就是懒)时,我们可以通过stdout将自己想看的属性展示在输出台。但是在实际项目运行时,这显然是不可靠的,比如一个网站24小时都在运行着,这个时候使用stdout很明显不现实了。所有今天就给大家带来和stdout不同的日志输出方式。

使用日志的原因

  1. 可以得知项目运行的情况,方便进行调试,迭代,修理和问题恢复等操作
  2. 便于协调,在与小组进行协同工作时,方便结果展示和交流
  3. 记录用户行为,用户在操作应用时进行的操作和习惯
  4. 开发时进行调试,可以方便开发时的bug调试等

日志是什么

这里的日志其实就是程序在运行的时候所产生的数据,它包含了网络设备、系统及服务程序(自定义有无)。日志里面包含了日期、时间、使用者及动作等相关操作的描述。简而言之就是我们出于各种目的,记录的程序运行中的一些状态。

常见日志框架

  1. slf4j
  2. jdk logging(java自带的)
  3. log4j
  4. logback
  5. ……

logback简介

Logback是由log4j创始人设计的另一个开源日志组件,官方网站。它当前分为下面几个模块:

  • logback-core:其它两个模块的基础模块

  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging

  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

使用logback

  1. 添加maven约束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!--slf4j依赖-->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--logback依赖-->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<!--通常会支持slf4j的api-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
  1. 创建logback.xml在项目resource文件夹中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!--默认配置文件更改时,会被重新加载,设置属性:scan(默认为true)-->
<!--当scan为true时,scanPeriod属性生效,scanPeriod用以设置监测配置文件是否有修改的时间间隔,
如果没有给出时间单位,默认单位是毫秒。默认的时间间隔为1分钟。-->
<!--debug: 默认值为false。当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--追加器 ConsoleAppender命令行-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<!--输出到文件-->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!--填写你希望存储的目标文件位置-->
<file>d:/test/test.log</file>
<!--日志要记录成的格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<!--trace等级以上的都会输出 等级排列:trace < debug < info < warn < error-->
<root level="trace">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>

</configuration>
  1. 测试一下

image-20210722193737688

image-20210722193752993

建议实际使用时将

1
2
3
4
<root level="trace">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>

改为

1
2
3
4
5
<!--或者自定义等级-->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>