日志框架、阶段项目
日志框架以及阶段项目的作用
系统在开发阶段或者上线后,一旦业务出现问题,需要有信息去定位,记录程序的运行信息就需要使用日之框架
把我们之前学习的内容进行学以致用,使用Java程序处理数据、控制业务逻辑推进。
什么是日志 ?
生活中的日志: 生活中的日志就好比日记,可以记录你生活的点点滴滴。
程序中的日志: 程序中的日志可以用来记录程序运行过程中的信息,并可以进行永久存储。
以前记录日志的方式
输出语句的弊端
Scanner sc = new Scanner(System.in);System.out.println(“请输入一个整数”); 信息只能展示在控制台int number = sc.nextInt(); 不能将其记录到其他的位置(文件,数据库) 想取消输出语句需要修改代码才可以完成
if(number == 0){
System.out.println(“除数不能为0”);
}else{
System.out.println(10 / number);
}
日志技术具备的优势
可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中)。
可以随时以开关的形式控制是否记录日志,无需修改源代码。**
日志技术和输出语句对比具备的优势?
输出语句 日志技术
输出位置 只能是控制台 可以将日志信息写入到文件或者数据库中
取消日志 需要修改代码,灵活性比较差 不需要修改代码,灵活性比较好
日志规范:一些接口,提供给日志的实现框架设计的标准。
日志框架:牛人或者第三方公司已经做好的日志记录实现代码,后来者直接可以拿去使用。
因为对Commons Logging的接口不满意,有人就搞了SLF4J。因为对Log4j的性能不满意,有人就搞了Logback。
日志的规范是什么,常见的有几种形式。
日志规范大多是一些接口,提供给实现框架去设计的。
常见的规范是:
Commons Logging
Simple Logging Facade for Java
日志的实现框架有哪些常见的?
Log4J
Logback(我们重点学习的,其他的都大同小异)
Logback日志框架
Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好
Logback是基于slf4j的日志规范实现的框架。
Logback主要分为三个技术模块:
logback-core: logback-core 模块为其他两个模块奠定了基础 ,相当于入口,必须有。
logback-classic:它是log4j的一个改良版本,核心功能模块 , 同时它完整实现了slf4j API。
logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能
使用Logback需要使用哪几个模块,各自的作用是什么。
logback-core:基础模块。
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
slf4j-api : 日志规范
Logback快速入门
需求:导入Logback日志技术到项目中,用于纪录系统的日志信息
分析:
①:在项目下新建文件夹lib,导入Logback的相关jar包到该文件夹下,并添加到项目依赖库中去。
②:将Logback的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。
③:在代码中获取日志的对象
④:使用日志对象LOGGER调用其方法输出不能的日志信息
使用Logback的开发步骤是怎么样的?
①:在项目下新建文件夹lib,导入Logback的相关jar包到该文件夹下,并添加到项目库中去。
②:必须将Logback的核心配置文件logback.xml直接拷贝到src目录下。
③:在代码中获取日志的对象
④:使用日志对象输出日志信息
Logback日志系统的特性都是通过核心配置文件logback.xml控制的。
Logback日志输出位置、格式设置:
通过logback.xml 中的
通常可以设置2个日志输出位置:一个是控制台、一个是系统文件中
输出到控制台的配置标志(记录红色字体即可)
输出到系统文件的配置标志(记录红色字体即可)
在核心配置文件Logback.xml中可以配置的日志方向有哪些。
输出到控制台的配置标志
<appender name=”CONSOLE“ …
输出到系统文件的配置标志
<appender name=“FILE” …
1、如果系统上线后只想记录一些错误的日志信息或者不想记录日志了,怎么办?
可以通过设置日志的输出级别来控制哪些日志信息输出或者不输出。
级别程度依次是:TRACE< DEBUG< INFO<WARN<ERROR ; 默认级别是debug(忽略大小写),对应其方法。
作用:用于控制系统中哪些日志级别是可以输出的,只输出级别不低于设定级别的日志信息。
ALL 和 OFF分别是打开全部日志信息,及关闭全部日志信息。
具体在
1、设置日志输出级别的作用是什么?
用于控制系统中哪些日志级别是可以输出的。
Logback的日志级别是什么样的?
级别程度依次是:TRACE< DEBUG< INFO<WARN<ERROR
默认级别是debug(忽略大小写),只输出不低于当前级别的日志
ALL 和 OFF分别是打开全部日志和关闭全部日志
请问什么是异常?
程序运行过程中由于数据的不合法导致程序无法继续执行,最终导致了虚拟机终止。
异常在程序中是什么形式存在的?
以异常类型的对象存在的,对象携带了异常相关的信息
程序中异常发生后的第一反应是什么
程序中一旦产生异常,首先会中断向下执行。
Error:严重问题,通过代码无法处理。
比如:内存溢出。
Exception:称为异常类,它表示程序本身可以处理的问题
RuntimeException及其子类:运行时异常。(空指针异常,数组索引越界异常)
非RuntimeException及其子类:编译时异常 , 编译期必须处理的,否则程序不能通过编译。
(日期格式化异常)。
简单来说:
编译时异常:就是在编译的时候可能出现的异常, 编译时期必须处理,否则程序无法执行
运行时异常:就是在运行时可能出现的异常, 在编译时期不需要处理
默认就是一种甩锅的处理方式!
虚拟机处理异常方式
1,异常就是程序出现的不正常的情况,导致了JVM非正常停止
2,异常的分类?
编译时异常、运行时异常
3,虚拟机默认处理异常的方式?
1, 将异常类型,原因,位置以红色字体打印在控制台
2, 结束程序运行
声明异常—— throws
修饰符 返回值类型 方法名(参数列表) throws 异常类型1 , 异常的类型2… { … }
public void show() throws NullPointerException , ArrayIndexOutOfBoundsException { …. }
表示告知调用者当前的方法可能会出现某些异常,使用时需要注意哦!
如果当前方法没有出现任何异常, 那么代码会正常执行
如果当前方法中出现了异常 , 会把异常交给本方法调用者处理(甩锅)
编译时异常因为在编译时就会检查,所以必须要写在方法后面进行显示声明
运行时异常因为在运行时才会发生,所以在方法后面可以不写
如果声明多个异常有子父类关系 , 那么只要声明一个父类即可(多态)
抛出异常 —— throw
格式:
修饰符 返回值类型 方法名(参数列表) {
throw new 异常类名();
}
注意 :
1 抛出异常的格式必须在方法的内部完成
2 如果手动抛出一个异常,下面的代码无法执行
throws 和 throw 的区别
Throw(产生锅,异常的源头)
用在方法体内,跟的是异常对象
表示手动抛出异常对象,告知调用者数据传入有误
异常对象我们自己创建
Throws(甩锅)
用在方法声明后面,跟的是异常类名
表示声明异常,调用该方法有可能会出现这样的异常
异常对象由JVM创建
**多个异常,每个异常单独处理
多个异常,一次捕获,多次处理
注意:如果多个异常有继承关系,父类异常要放在子类异常后面。建议使用
多个异常,异常一次捕获,一次处理
抛出 throw throws
1.在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理。表示让该方法结束运行。
2.告诉调用者出现了问题。
捕获 try…catch
捕获:阻止异常的传递, 能让代码继续往下运行。
底层逻辑:甩锅
上层逻辑进行抓获:tey..cath
自定义异常存在的意义:为了让控制台的报错信息更加见名之意。
为什么要学习异常? 因为我们要处理代码中出现的问题
异常的处理方式:抛出和捕获
抛出的意义:让方法停止并告诉调用者这里出现了问题
捕获的意义:阻止异常传递 , 让程序可以继续往下执行
自定义异常的意义:让程序的提示报错更加的见名知意
日志记录信息
模块下创建directory 命名:lib 将类库三个jar包复制粘贴进去,全选下面右键All选项,将lockback.xml文件拷贝到src目录下进来即可!
(.String)
public static final Logger LOGGER=LoggerFactory.getLogger(LoggerDemo.class);