SLF4J在可分发库中,如何获取Logger

时间:2012-01-06 13:45:17

标签: java logging slf4j

我想依靠SLF4J记录器接口分发一个lib。获取记录器的最佳实践方法是什么,它可以很好地集成到任何其他项目中?对于非结构化的问题风格,我还在努力弄清楚所有这些东西是如何粘在一起的。

在其他项目中,我总是使用这段代码,因为我想获得一个自定义记录器:

private final static Logger LOGGER = LoggerFactory.getILoggerFactory().getLogger(NAME_OF_APP);

如果我创建了类org.slf4j.impl.StaticLoggerBinder并且拥有其他lib,那么即使我只是调用LoggerFactory.getLogger(NAME_OF_APP)或使用某个默认的slf4j工厂,其中定义的工厂是否也会被使用?

我希望用户能够使用他自己的工厂和记录器,那么哪种方式是优惠,最重要的是为什么?

4 个答案:

答案 0 :(得分:3)

我不确定我完全明白你要做什么。

SLF4J由两部分组成。首先,您在lib中使用的API来编写日志记录调用。其次是在开发过程中用于执行日志记录的实现,但不要将其设置为lib的依赖项。

因为SLF4J在类路径上查找实现,所以使用我们的lib的开发人员可以简单地包含他们想要的任何实现。有时是一些非常奇怪的方式:-)他们可以使用一系列预先构建的实现或自己编写代码。这取决于他们。

我认为你不需要做任何事情,只需按原样使用SLF4J的API。

答案 1 :(得分:2)

来自http://slf4j.org/manual.html

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

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

因此,请始终使用LoggerFactory.getLogger(...)。该参数允许记录器后端确定返回给您的记录器的行为。

答案 2 :(得分:0)

我不确定我完全理解你的情景。

但是从我的观点来看,你想要的是一个分布式日志记录组件。

这样做的一个简单方法是套接字appender。分布式日志记录的完整功能组件可能类似于Facebook的抄写员。

答案 3 :(得分:0)

使用Logger中的jcabi-log静态包装:

import com.jcabi.log.Logger;
public class MyLibraryClass {
  public void foo() {
    Logger.info(this, "some information");
  }
}

所有日志都将通过SLF4J发送。