美文网首页
log4j2 slf4j

log4j2 slf4j

作者: MakeACoder | 来源:发表于2019-06-21 14:39 被阅读0次

    jar包说明

    slf4j的api接口包:slf4j-api
    log4j2的核心包:log4j-core
    log4j2的api接口包:log4j-api
    slf4j对应log4j2日志框架的驱动包:log4j-slf4j-impl
    log4j2的异步日志功能包:com.lmax.disruptor
    解决web项目log4j可能出现警告的jar包:log4j-web
    

    log-web包 作用

    主要用于解决web环境下关闭服务器时可能出现的log4j线程无法及时关闭的warn web工程需要包含log4j-web,非web工程不需要

    log4j 官方手册:https://logging.apache.org/log4j/2.x/manual/webapp.html

    在Java EE Web应用程序中使用Log4j或任何其他日志记录框架时,您必须特别小心。 当容器关闭或取消部署Web应用程序时,正确清理日志资源(关闭数据库连接,关闭文件等)非常重要。 由于Web应用程序中类加载器的性质,无法通过常规方式清除Log4j资源。 当Web应用程序部署并在Web应用程序取消部署时“关闭”时,Log4j必须“启动”。 它的工作原理取决于您的应用程序是Servlet 3.0还是更新版本或Servlet 2.5 Web应用程序。

    为避免出现问题,当包含log4j-web jar时,将自动禁用Log4j关闭挂钩。

    上面是 log4j 官方的文档,上文的大意就是 Log4j 默认会用一个 Runtime.getRuntime().addShutdownHook 钩子用来在程序关闭时释放资源,可见源码部分
    ,由于 web 服务比较特殊,避免像 kill -9 这种不触发钩子,可以使用 log4j-web 这个jar,它是利用的 Servlet 的生命周期来进行 log4j 的配置和资源的释放

    log类创建

    用slf4j的方式创建logger 两个类(logger和LoggerFactory都是slf4j的)

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class LogHelper {
           //用slf4j的方式创建logger 两个类(Logger和LoggerFactory都是slf4j的)
           Logger logger = LoggerFactory.getLogger(LogHelper.class);
    }
    

    直接用log4j创建时 用的是 Logger(跟上面的包不一样)LogManager

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class LogHelper {
        //直接log4j2获取
        private static final Logger logger = LogManager.getLogger(LogHelper.class);
    }
    

    相关文章

      网友评论

          本文标题:log4j2 slf4j

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