日志系统学习和使用: Log4j + SLF4J + Logback

📌03、日志系统学习和使用: Log4j + SLF4J + Logback

    • 1、基础概念理解
      • 1、Commons Logging定义了6个日志级别:
        • TRACE < DEBUG < INFO(默认) < WARN < ERROR < FATAL
      • 2、配置日志级别是什么?
        • 即配置系统的最低(最小)输出日志级别。比这个级别高的会输出,低的不会输出。
        • 并且,Java的默认级别是INFO。(不进行配置则默认是INFO)
    • 2、日志系统的发展,以及使用(JDK Logging + Commons Logging + Log4j + SLF4J和Logback)
      [参考: 使用Log4j - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/1252599548343744/1264739436350112 ]
      • 关于日志接口和日志实现
        • 日志接口:Commons Logging + SLF4J
          • 代码中方便使用的部分(方便调用)
        • 日志实现:JDK Logging + Log4j + Logback
          • 实际输出日志的部分
      • 1、先说JDK Logging
        • Java内置的日志实现,最基础的。
        • 但是因为配置不方便,导致使用的较少。
      • 2、再说Commons Logging + Log4j
        • Commons Logging 是日志接口,意味着他可以对接不同的日志实现(特色)。比如:Log4j。
          • 默认情况下,Commons Loggin自动搜索并使用Log4j(Log4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging。
        • Log4j 的配置模板
      • 3、最后说 SLF4J和Logback
        • SLF4J类似于Commons Logging,也是一个日志接口,而Logback类似于Log4j,是一个日志的实现。
        • 为什么出现?
          • 因为对Commons Logging的接口不满意,有人就搞了SLF4J。
            • SLF4J 接口支持更好的字符串拼接
          • 因为对Log4j的性能不满意,有人就搞了Logback。
        • SLF4J 的配置模板
    • 3、日志通用元素:Appenders + Logger + Root
      • 1、通用元素:
        • Logger
          • 主要控制日志输出级别(和Root类似),以及输出位置(和Appenders关联)。
          • 和ROOT的不同在于,Logger可以对不同包、不同类进行特定的配置。而ROOT是面向所有代码的。
        • Appenders
          • 控制日志输出位置、格式、文件大小、清理方式等等。也可以自己过滤级别。
        • Root
          • 表示根节点。其配置对所有的日志输出都生效,即一个文件如果匹配到ROOT。那么,就会输出到ROOT中配置的所有Appenders。
      • 2、Logger 和 Appenders 的实际使用说明 + 继承关系
        • 例:
          • 对一个Java类来说,它会先根据Logger和Root进行匹配,并根据日志级别进行过滤,来获取当前文件可以对应的Appenders。
          • 然后,它再匹配相关的Appenders,来确定日志的打印样式和位置等等。
            • 注:一个Java类可以匹配多个Appenders。就会输出到不同的地方。
        • Logger和Root的关系与区别(对应到Appenders上)
          • 作用上:
            • Logger和Root的作用一致,都是和Appenders进行关联,控制日志输出对应的Appenders
          • 区别:
            • Root对所有文件都生效,Logger只对符合其规则的文件生效。
          • 疑问?
            • 1、Root和Logger会同时生效么?
              • 会的。除非在Logger节点上配置属性:additivity="false",屏蔽Root(以及父级的生效)的生效
            • 2、如果1个类匹配到多个Logger(父级嵌套),会将匹配到的所有Logger中的Appenders都输出么?(即会重复输出么?)
              • 会的。这个问题本质和Root一致,因为Root是所有Logger的父级。解决同ROOT。
    • 4、END
posted @ 2021-03-23 16:23  不无聊  阅读(86)  评论(0)    收藏  举报