栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

log4j slf4j log4j2 logback

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

log4j slf4j log4j2 logback

日志框架

最常见的日志框架:log4j、log4j2、logback

从JDK1.4开始提供java.util.logging日志框架来打印日志,但大佬觉得JUL太难用了,于是手撸了个log4j,后来log4j发现了安全漏洞,加上代码结构问题难以维护,于是从1.2就停止更新log4j,并重新撸了个log4j2,再后来,大佬又撸了一个性能更高、功能更全的logback。

slf4j是提供日志打印的接口,需要搭配其他日志框架来使用

log4j

//注意包路径
import org.apache.log4j.Logger;

Logger logger_log4j = Logger.getLogger(Log4jDemo.class);
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

log4j2

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Logger logger_log4j2 = LogManager.getLogger(Log4j2Demo.class);


    
        
            
        
    
    
        
            
        
        
            
        
    

logback

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Logger logger_logback = LoggerFactory.getLogger(LogBackDemo.class);


    
    
    
    
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    
    
    
        ${LOG_HOME}/main.log
        
            
            ${LOG_HOME}/main.%d{yyyy-MM-dd}.log
            
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    

    
    
    
        
        
    

slf4j

和log4j配合,需要导入「log4j.jar」,以及桥接包「slf4j-log412.jar」。
log4j2配合需要导入log4j2的「log4j-api.jar」、「log4j-core.jar」和桥接包「log4j-slf4j-impl.jar」
logback只需要导入「logback-classic.jar」和「logback-core.jar」即可,不需要桥接包

为什么logback不需要桥接包

原理就是就是让ClassLoader从classpath(依赖的jar)中找到「StaticLoggerBinder」这个类,然后利用他来返回log4j、logback中的Logger,然后打印日志。

所谓的桥接包,就是实现StaticLoggerBinder类,用来连接slf4j和日志框架。因为log4j和log4j2刚开始没有StaticLoggerBinder这个类,为了不改变程序结构,只能重新写一个新的jar来实现StaticLoggerBinder。而logback出现slf4j之后,于是在logback本身的jar中实现了StaticLoggerBinder,所以就不需要桥接包。

StaticLoggerBinder实现了使用底层日志框架创建Logger的功能,各自的StaticLoggerBinder为slf4j提供的Logger,再提供给用户打印日志。

log4j和log4j2桥接包及logback依赖里,都有StaticLoggerBinder类。

问题

logback-classic、log4j-slf4j-impl、slf4j-log412、slf4j-jdk这些jar不能同时存在。他们都实现了StaticLoggerBinder类而导致冲突,slf4j无法确定到底用哪个日志框架

参考链接
https://blog.csdn.net/ziyunmuxu/article/details/121912893

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号