美文网首页
Log4j 打印日志的原理

Log4j 打印日志的原理

作者: 山间草夫 | 来源:发表于2020-11-13 13:52 被阅读0次

log4j-slf4j-impl: log4j的日志转到slf4j上

LoggerFactory.getLogger () 方法 寻找对应的logger

  1. org.slf4j.LoggerFactory#findPossibleStaticLoggerBinderPathSet
    寻找staticLoggerBinder

  2. paths = loggerFactoryClassLoader.getResources(STATIC_LOGGER_BINDER_PATH);
    通过路径寻找所有的binder, 这里的STATIC_LOGGER_BINDER_PATH = org/slf4j/impl/StaticLoggerBinder.class, 每个slf4j的具体实现类都有一个StaticLoggerBinder.class

  3. org.slf4j.LoggerFactory#reportMultipleBindingAmbiguity
    判断是否有多个binder, 如果有将会打印日志: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Z:/repository/org/slf4j/slf4j-simple/1.7.28/slf4j-simple-1.7.28.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/Z:/repository/org/slf4j/slf4j-nop/1.7.28/slf4j-nop-1.7.28.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.., 这个日志是我们常见的, 因为有多个日志实现

org/slf4j/impl/StaticLoggerBinder.class, 每个slf4j的日志实现都有这个类
找到所有绑定的logger

  1. 调用 StaticLoggerBinder.getSingleton();
    这里如果有多个class, 应该是按顺序调用第一个class的getSingleton(),
  2. 调用 reportActualBinding
    打印绑定的是哪一个日志实现
  SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
  1. getILoggerFactory()
    获得到刚才StaticLoggerBinder的日志工厂
  2. SimpleLoggerFactory.getLogger
    public Logger getLogger(String name) {
        Logger simpleLogger = (Logger)this.loggerMap.get(name);
        if (simpleLogger != null) {
            return simpleLogger;
        } else {
            Logger newInstance = new SimpleLogger(name);
            Logger oldInstance = (Logger)this.loggerMap.putIfAbsent(name, newInstance);
            return (Logger)(oldInstance == null ? newInstance : oldInstance);
        }
    }

指定的logger 作缓存, 然后调用info() 方法打印日志.

相关文章

  • #30天专注成长计划# day23 Log4j输出日志格式

    Log4j输出日志格式 Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: - ...

  • Mybatis日志级别

    1.1 log4j简介 log4j是Apache提供的一款记录日志的工具 log4j既可以将日志信息打印在控制台,...

  • logback学习笔记

    目的:将项目中的log4j改为logback,并且使用门面日志slf4j进行打印日志。 1.删除log4j的依赖 ...

  • Log4j各级别日志重复打印的问题

    今天在配置Log4j日志的时候,发现日志重复打印的问题。网上查了很多资料,发现介绍Log4j配置的文章数量不少,但...

  • log4j 过滤日志到 flume

    功能需求:将 log4j 打印的日志部分(这里是以 "ApiName" 开头的日志)上传到 flume。 实现: ...

  • Log4j 打印日志的原理

    log4j-slf4j-impl: log4j的日志转到slf4j上 LoggerFactory.getLo...

  • Java日志框架JUL

    1 日志实现原理 Java 的日志框架有很多,比如:JUL(Java Util Logging)、Log4j、Lo...

  • log4j 常用配置说明

    以下是自己使用log4j时的常用配置,保存日志,打印ibatis的sql信息

  • JAVA log日志系统

    今天讲一下java的日志级别,非log4j/slf4j日志日志级别 Level描述OFF不打印任何SEVERE严重...

  • Log4J配置文件

    Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下: %m 输出代 码中...

网友评论

      本文标题:Log4j 打印日志的原理

      本文链接:https://www.haomeiwen.com/subject/wbmpbktx.html