前言
为什么需要记录日志?我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着至关重要的作用
一、日志概括
1.了解日志框架
JAVA在早期的日志都是通过System.out.println()
进行记录的,但是这种方式不便于管理,所以apache最先开发了首个日志框架:log4j
; 为日志框架奠定了基础;
日志框架出现的历史顺序为 :
log4j → JUL → JCL → SLF4J → logback → log4j2
本章我们学习 logback ;目前比较火的框架,spring2.0默认使用logback日志
2.了解logback
Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j好
Logback是SpringBoot内置的日志处理框架,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。
Logback主要分为三个技术模块:
- Logback-core:为其他两个模块奠定了基础,必须有
- Logback-classic:它是log4j的一个改良版本,同时完整实现了slf4j API
- Logback-access:与Tomcat 和 Jetty等Servlet容器集合,以提供HTTP访问日志功能
二、使用logback
1.导入jar包
首先建一个名为lib的目录,把jar包导入进去
全选我们的jar包,然后右键,选择Add as library . . .
2.配置文件XML
网上下载logback.xml文件,将核心配置文件logback.xml拷贝到src目录下(必须是src)
或者在src目录下创建xml文件,直接复制如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--输出流对象 默认 System.out 改为 System.err-->
<target>System.out</target>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern>
</encoder>
</appender>
<!-- File是输出的方向通向文件的 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!--日志输出路径-->
<file>C:/code/itheima-data.log</file>
<!--指定日志文件拆分和压缩规则-->
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--通过指定压缩文件名称,来确定分割文件方式-->
<fileNamePattern>C:/code/itheima-data2-%d{yyyy-MMdd}.log%i.gz</fileNamePattern>
<!--文件拆分大小-->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
, 默认debug
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="ALL">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</root>
</configuration>
3.使用logback
public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");
public static void main(String[] args) {
try {
LOGGER.debug("main开始执行");
("第二行,开始做除法");
int a = 10;
int b = 0;
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("功能异常" + e);
}
}
注意xml文件中
输出到控制台配置标志:
输出到系统文件配置标志:
文件输出路径:
<file>C:/code/itheima-data.log</file>
到该路径打开文件后:
4.日志级别
用于控制系统中哪些级别的日志输出,只输出级别不低于设定级别的日志信息
TRACE < DEBUG < INFO < WARN < ERROR
ALL:打开全部日志信息
OFF:关闭全部日志信息
默认级别是debug(大小写不区分)
- TRACE 级别最小,打印信息最为详细,一般不会使用。
- DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息
- INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
- WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
- ERROR 级别最大,打印信息最为简略