繁体   English   中英

使用slf4j作为log4j2的抽象

[英]Using slf4j as an abstraction for log4j2

我正在一个JAVA项目中,其中所有的代码记录都通过使用slf4j完成。 例如

package my.project.package;

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


    public class MyClass {

        private Logger logger = LoggerFactory.getLogger(MyClass.class);

        //some attributes, their getters and setters


        public void initialize() {
        //some code

        logger.info("Data received successfully!");

        //some code

    }
}

现在,我们还有一个log4j2.xml文件。 当servlet上下文初始化时,将加载此文件。

Configurator.initialize(null, FileFinderUtil.findFile("log4j2.xml", projectName, fallback).getAbsolutePath()); 

其中configurator是log4j2库中的类。 我们还将这个log4j2.xml文件部署在服务器上(tomcat)

1)我看过这个关于SLF4J和log4j2工作在一起,使链路。 如果slf4j2是一个抽象(我将其理解为抽象类),那么如何初始化该类的对象呢? 在Java中,抽象类不能具有对象

2)对于两者一起工作,是slf4j对象正在编写日志,但实际上是使用log4j2库在后台吗? 有人可以用简单的方式解释这个过程吗?

1)slf4j2不是抽象类,它只是log4j2的抽象。

2)log4j2是slf4j的包装器。 Java应用程序使用slf4j进行日志记录,但是tomcat使用log4j2在服务器上进行日志记录。

因此,log4j2的问题在于,当tomcat的一个实例上部署了许多应用程序并且它们都拥有自己的log4j2实例时,这会导致tomcat崩溃。 对于这种情况,我们可以在服务器上使用slf4j2的多个版本,而它们在Tomcat上依次仅使用一个实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM