Могу ли я создать «легкую» зависимость от сторонних библиотек, таких как log4j, в моей собственной библиотеке? - PullRequest
1 голос
/ 27 ноября 2010

Я поддерживаю библиотеку для доступа к базе данных на http://jooq.sourceforge.net,, и я хотел бы использовать log4j для ведения журнала. Но регистрация - действительно очень дополнительная часть моей библиотеки. Если log4j недоступен в коде клиента, то я не буду заниматься журналированием. Таким образом, я создал прокси-сервер журнала, как это:

public final class JooqLogger {

  // Initialise only once
  private static boolean initialisationError = false;

  // The log4j Logger reference
  private Logger logger;

  // Get the logger proxy for a class
  public static JooqLogger getLogger(Class<?> clazz) {
    JooqLogger result = new JooqLogger();

    try {
      result.logger = Logger.getLogger(clazz);
    }

    // Log4j is not found on the classpath, so ignore most of logging
    catch (Throwable t) {
      if (!initialisationError) {
        initialisationError = true;
        result.error("JooqLogger could not initialise log4j logger...");
      }
    }

    return result;
  }

  // All methods from log4j Logger are available as well.
  // They provide redirection and ignore all calls if log4j is not available.
  public boolean isTraceEnabled() {
    if (logger != null) {
      return logger.isTraceEnabled();
    }
    else {
      return false;
    }
  }

  public void trace(Object message) {
    if (logger != null) {
      logger.trace(message);
    }
  }

  // [... etc ...]
}

Мои вопросы:

  1. Это хорошая идея / хорошая практика? Или я должен создать "жесткую" зависимость от log4j?
  2. При использовании вышеуказанного решения регистрация не будет такой точной, как если бы я непосредственно вызывал методы log4j. Например, номер зарегистрированной строки или файл .java в файлах журнала всегда будут такими же, как у JooqLogger, а не у вызывающего. Есть ли способ обойти эту проблему?

1 Ответ

1 голос
/ 27 ноября 2010

Создайте для него интерфейс с реализацией Null, затем разрешите конечному разработчику / пользователю / администратору заменить другую реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...