SLF4J в распространяемой библиотеке, как получить Logger - PullRequest
4 голосов
/ 06 января 2012

Я хочу распространять библиотеку, опираясь на интерфейс регистратора SLF4J. Каков наилучший способ получить регистратор, который прекрасно интегрируется в любой другой проект? Извините за неструктурированный стиль вопроса, я все еще пытаюсь выяснить, как все это склеено.

В других проектах я всегда использую этот кусок кода, потому что я хочу получить собственный регистратор:

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

Если я создаю класс org.slf4j.impl.StaticLoggerBinder и у него есть какая-то другая библиотека, используется ли указанная фабрика, даже если я просто вызываю LoggerFactory.getLogger(NAME_OF_APP), или используется какая-то фабрика по умолчанию для slf4j?

Я хочу, чтобы пользователь мог использовать свою собственную фабрику и регистратор, так какой же путь лучше всего и почему больше всего?

Ответы [ 4 ]

3 голосов
/ 06 января 2012

Я не уверен, что полностью понимаю, что вы пытаетесь сделать.

SLF4J состоит из двух частей.Сначала API, который вы используете в своей библиотеке для кодирования ваших вызовов.И, во-вторых, реализация, которую вы используете во время разработки для ведения журналов, но НЕ устанавливайте ее как зависимость от lib.

Поскольку SLF4J ищет реализации пути к классам, разработчики, использующие нашу библиотеку, могут просто включить любую реализацию, какую захотят.Иногда это довольно странные способы :-) Они могут использовать ряд готовых реализаций или кодировать свои собственные.Это зависит от них.

Я не думаю, что вам нужно делать что-то большее, чем просто использовать API SLF4J как есть.

2 голосов
/ 11 января 2012

С 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(...). Аргумент позволяет бэкэнду регистратора определять поведение возвращаемого вам регистратора.

0 голосов
/ 06 февраля 2013

Использование Logger статическая оболочка из jcabi-log :

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

Все журналы будут отправлены через SLF4J.

0 голосов
/ 06 января 2012

Я не уверен, что полностью понимаю ваш сценарий.

Но, с моей точки зрения, вам нужен компонент распределенной регистрации.

Простой способ сделать это - добавить сокет.А полноценный компонент для распределенной регистрации может понравиться писец Facebook.

...