日志框架、阶段项目

    日志框架以及阶段项目的作用

    系统在开发阶段或者上线后,一旦业务出现问题,需要有信息去定位,记录程序的运行信息就需要使用日之框架

    把我们之前学习的内容进行学以致用,使用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分别是打开全部日志信息,及关闭全部日志信息。

    具体在标签的level属性中设置日志级别。

    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);