Java log日志框架

一、总体介绍

1.1 基本日志框架之间关系

Java log日志框架_第1张图片

日志框架:

- - - 提供日志调用的接口,实际的日志输出托付给日志系统实现。
JCL(Jakarta Commons Logging):比較流行的日志框架,非常多框架都依赖JCL,比如Spring等。
SLF4j:提供新的API,初衷是配合Logback使用,但同一时候兼容Log4j。

日志系统:

负责输出日志
Log4j:经典的一种日志解决方式。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们能够通过配置文件轻松的实现日志系统的管理和多样化配置。
Log4j2:Log4j的2.0版本号。对Log4j进行了优化。比方支持參数API、支持异步appender、插件式架构等
Logback:Log4j的替代产品。须要配合日志框架SLF4j使用
JUL(java.util.logging):JDK提供的日志系统。较混乱,不经常使用

1.2 日志转换

Java log日志框架_第2张图片
Java log日志框架_第3张图片

二、日志框架

2.1 SFL4J-API

2.1.1 门面模式:

Java log日志框架_第4张图片

2.1.2 SLF4J官网图

Java log日志框架_第5张图片

2.1.3 源码分析
 1)LoggerFactory.getLogger();
 
 2)LoggerFactory.getILoggerFactory()
 
 3)LoggerFactory.performInitialization()
 
 4)LoggerFactory.bind()
 
 5) LoggerFactory.findPossibleStaticLoggerBinderPathSet();
 
 6) STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class"
 
 7) StaticLoggerBinder.getLoggerFactory()
 

2.2、Log4j2

2.2.1 log4j2 为什么高性能
1)无垃圾机制,对象重用和缓存区使用,避免频繁日志收集导致JVM GC
   2.6版本之后,默认情况下以log4j以“无垃圾方式运行”,并且尽可能不分配临时对象。         

2) 异步日志-> ArrayBlockingQueue
   两种方式:异步logger
             异步appender
     

2.2.2 log4j2 使用

虽然log4j2 也有自己的门面,但主流还是sfl4j + log4j2使用

2.2.3 springboot 日志使用

三、日志打印规范

3.1 日志级别
常见的日志级别有以下:

ALL级别 最低等级的,用于打开所有日志记录。
trace:跟踪日志,与debug差别不大
debug:调试问题使用,一定要打印出输入、输出数据
info:打印程序运行信息,启动信息等
warn:打印一些警告信息,比如参数校验错误等等
error:打印程序错误信息,必须要打印上下文信息,方便查找问题
fatal:重大灾难信息,比如数据库无法连接等需要立即处理的问题
OFF级别 最高等级的,用于关闭所有日志记录。

3.2 日志内容
3.2.1 不要使用System.out.println
3.2.2 除非业务需要,否则不要打印大文本
3.2.3 定义logger变量为static
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Slf4j {


    /**
     * 日志记录器对象
     */
    private static final Logger logger = LoggerFactory.getLogger(Slf4j.class);
    
}
3.2.4 正确使用日志级别
3.2.5 不允许出现printStackTrace。
3.2.6 使用占位符
    // 使用{}占位符。避免字符串连接操作,减少String对象(不可变)带来的内存开销
	log.debug("XXX {}", String);

3.2.7 有意义的日志

3.3 日志要求

3.3.1 日志文件分开打印,便于查看和抓取日志
3.3.2 对于无法预知的异常,一定要打印堆栈
3.3.3 日期必须精确到毫秒,而不是秒
3.3.4 日志归档
3.3.5 确保日志是按事件顺序输出
3.3.6 配置日志滚动策略
3.3.7 【推荐】最好能打印调用方信息,比如访问者ip等信息
3.3.8 日志文件要可以方便使用grep语句查看

四、应用

4.1 log4j2 配置文件详解


 
 
 
 
     
     
     
         
         
             
         
     
     
        
     
     
         
             
             
             
             
                 
                 
             
         
         
             
             
             
                 
                 
             
         
             
         
         
             
             
             
                 
                 
             
         
     
     
     
         
         
         
         
             
             
             
             
         
     
 


4.2 项目演示

Github地址

五、案例

5.1 log4j升级log4j2实战
5.1.1 适配器和桥接器不能同时使用
5.2 使用slf4j的实现类logback日志框架
   1. 引入slf4j & logback日志包和slf4j -> logback适配器;

  2. 排除common-logging、log4j、log4j2日志包;

  3. 引入jdk-logging -> slf4j、common-logging -> slf4j、log4j -> slf4j、log4j2 -> slf4j桥接器;

  4. 排除slf4j -> jdk-logging、slf4j -> common-logging、slf4j -> log4j、slf4j -> log4j2适配器。


你可能感兴趣的:(Java常用框架,java)