首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用slf4j作为log4j2的抽象

使用slf4j作为log4j2的抽象
EN

Stack Overflow用户
提问于 2018-02-14 23:12:30
回答 1查看 400关注 0票数 1

我正在做一个JAVA项目,其中代码中的所有日志记录都是使用slf4j完成的。例如:

代码语言:javascript
复制
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上下文时加载此文件

代码语言:javascript
复制
Configurator.initialize(null, FileFinderUtil.findFile("log4j2.xml", projectName, fallback).getAbsolutePath()); 

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

1)我已经阅读了关于slf4j和log4j2协同工作的this SO链接。如果slf4j2是一个抽象(我将其理解为抽象类),那么如何初始化该类的对象呢?在java中,抽象类不能有对象。

2)对于两者协同工作,是不是因为slf4j对象正在写日志,但实际上是在后台使用log4j2库来写日志?有没有人能用简单的术语来解释这个过程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-15 19:35:19

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48790413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档