Как сделать запись без зависимости пакета каркаса?

1

У меня есть пакет Utility, в котором нет смысла иметь log4j в качестве зависимости, однако есть некоторые статические методы, в которых я бы хотел сделать некоторые записи.

Я не хочу делать следующее:

  • передать регистратор в качестве параметра
  • иметь регистратор в качестве зависимости
  • исключать исключения для вещей, которые не являются исключениями (считайте журнал INFO или WARN)

В любом случае я могу вести журнал, не имея регистратора в качестве зависимости от пакета, но он все еще использует log4j, когда он находится в пути к классам.

  • 0
    @MadProgrammer - будет ли он по-прежнему использовать log4j, когда он находится на пути к классам?
  • 0
    Какую структуру управления зависимостями вы используете? Maven, но по умолчанию, например, не будет включать зависимости напрямую в конечный продукт сборки. NetBeans может позволить вам определить проект как «Библиотеку» с тем же результатом. Вам все еще нужен log4j в вашем списке «зависимостей», поэтому он будет компилироваться, но он не будет иметь прямой зависимости в конечном jar- ClassLoader и будет полагаться на тот факт, что ClassLoader сможет его найти ...
Теги:
logging

1 ответ

0

Вы можете проверить, находится ли log4j в пути к классам со следующим:

Class.forName("org.apache.log4j.Logger");

Если вы возвращаете Class без исключений, вы можете приступить к созданию регистратора и использовать его.

Вот полный примерный класс, который использует этот подход. Обратите внимание, что вам все еще нужно log4j для компиляции вашего класса, потому что вы ссылаетесь на log4j Logger но вы можете использовать код с или без log4j в пути к классам.

class YourUtil {

    private static final Logger LOGGER;
    static {
        Class<?> clazz = null;
        try {
            clazz = Class.forName("org.apache.log4j.Logger");
        } catch (ClassNotFoundException e) {}

        LOGGER = clazz == null ? null : Logger.getLogger("com.foo.YourUtil");
    }

    public static void doSomething() {
        // To log something:
        if (LOGGER != null)
            LOGGER.info("Logging using log4j.");
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню