日志终极总结

日志的记录时机

日志使用规约

logback 配置示例

loh4j2 配置示例

1、什么是日志?

​ 简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。我们 Java 程序员在开发项目时都是依赖 Eclipse/ Idea 等开发工具的 Debug 调试功能来跟踪解决 Bug,在开发环境可以这么做,但项目发布到了测试、生产环境呢?你有可能会说可以使用远程调试,但实际并不能允许让你这么做。所以,日志的作用就是在测试、生产环境没有 Debug 调试工具时开发、测试人员定位问题的手段。日志打得好,就能根据日志的轨迹快速定位并解决线上问题,反之,日志输出不好不能定位到问题不说反而会影响系统的性能。优秀的项目都是能根据日志定位问题的,而不是在线调试,或者半天找不到有用的日志。

2、常用日志框架

​ log4j、Logging、commons-logging、slf4j、logback,开发的同学对这几个日志相关的技术不陌生吧,为什么有这么多日志技术,它们都是什么区别和联系呢?相信大多数人搞不清楚它们的关系,下面我将一一介绍一下,以后大家再也不用傻傻分不清楚了。

2.1、Logging 【java 自带工具】

​ 这是 Java 自带的日志工具类,在 JDK 1.5 开始就已经有了,在java.util.logging 包下。

2.2、Log4j 【框架实现】

​ Log4j 是 Apache 的一个开源日志框架,也是市场占有率最多的一个框架。大多数没用过 Java Logging, 但没人敢说没用过 Log4j 吧,反正从我接触 Java 开始就是这种情况,做 Java 项目必有 Log4j 日志框架。注意:log4j 在 2015/08/05 这一天被 Apache 宣布停止维护了,用户需要切换到 Log4j2上面去。

下面是官方宣布原文

On August 5, 2015 the Logging Services Project Management Committee announced that Log4j 1.x had reached end of life. For complete text of the announcement please see the Apache Blog. Users of Log4j 1 are recommended to upgrade to Apache Log4j 2. 2.3、Commons-logging 【日志接口】

​ 上面介绍的 log4j 是一个具体的日志框架的实现,而 commons-logging 就是日志门面接口,它也是 apache 最早提供的日志门面接口,用户可以根据喜好选择不同的日志实现框架,而不必改动日志定义,这就是日志门面的好处,符合面向接口抽象编程。

2.4、 Slf4j 【日志接口】

​ 全称:Simple Logging Facade for Java,即简单日志门面接口,和 Apache 的 commons-logging是一样的概念,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。Slf4j也是现在主流的日志门面框架,使用Slf4j可以很灵活的使用占位符进行参数占位,简化代码,拥有更好的可读性,这个后面会讲到。

2.5、 Logback 【框架实现】

​ Logback 是 Slf4j 的原生实现框架,同样也是出自 Log4j一个人之手,但拥有比log4j更多的优点、特性和更做强的性能,现在基本都用来代替 log4j 成为主流。

2.6、日志框架总结

commons-loggin、slf4j 只是一种日志抽象门面,不是具体的日志框架。

log4j、logback 是具体的日志实现框架。

一般首选强烈推荐使用 slf4j + logback。当然也可以使用slf4j + log4j、commons-logging + log4j 这两种日志组合框架。

3、日志级别详解

​ 日志的输出都是分级别的,不同的设置不同的场合打印不同的日志。下面拿最普遍用的 Log4j 日志框架来做个日志级别的说明,这个也比较全面,其他的日志框架也都大同小异。Log4j 的级别类 org.apache.log4j.Level 里面定义了日志级别,日志输出优先级由高到底分别为以下8种。

3.1 、日志级别及描述

ERROR:系统发生了错误事件,但仍然不影响系统的继续运行。系统需要将错误或异常细节记录ERROR日志中,方便后续人工回溯解决。

WARN: 系统在业务处理时触发了异常流程(参数验证不过),但系统可恢复到正常态,下一次业务可以正常执行。如程序调用了一个旧版本的接口,可选参数不合法,非业务预期的状态但仍可继续处理等

INFO: 记录系统关键信息,旨在保留系统正常工作期间关键运行指标,开发人员可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到INFO日志中,方便日常运维工作以及错误回溯时上下文场景复现

DEBUG: 可以将各类详细信息记录到DEBUG里,起到调试的作用,包括参数信息,调试细节信息,返回值信息等。

3.2 、日志优先级别标准顺序

​ ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

3.3 、设置级别和打印级别的关系

​ 如果日志级别设置 INFO,只有输出级别为 INFO、WARN,后面的日志才会正常输出。

4、日志的记录时机 4.1、系统初始化

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyszs.html