2013-06-17 2 views
0

У меня есть некоторые проблемы с пониманием использования обложек log4j2.Как использовать API-интерфейс обертки log4j2

Если вы следуете за этим link, вы найдете прилагаемый пример использования AbstractLoggerWrapper. Я просто скопировал следующий мир кода.

public class Log4j2Logger extends AbstractLogger 
{ 

    private static final String FQCN = AbstractLogger.class.getName(); 
    private AbstractLoggerWrapper logImpl; 

    public Log4j2Logger(String name, String prefix, String logId, String instanceId) 
    { 
     super(name, prefix, logId, instanceId); 
     final AbstractLogger logger = (AbstractLogger) LogManager.getLogger(name); 
     this.logImpl = new AbstractLoggerWrapper(logger, name); 
    } 

    .... 

    @Override 
    public void log(String message, LogLevel level) 
    { 
     logImpl.log(null, FQCN, toImplLevel(level), new SimpleMessage(createMessage(message)), null); 
    } 

    .... 
} 

Я не понимаю причину подклассов AbstractLogger и стажер с помощью AbstractLoggerWrapper. Я мог бы просто удалить расширение из Log4j2Logger и инкапсулировать AbstractLoggerWrapper. Видите ли вы какую-либо причину этого, как в коде, перекошенном выше?

Есть ли способ подкласса AbstractLogger (например, preferred) и просто использовать его без оболочки? И создать его как шаблон стратегии? например,

LogManager.getLogger(class.getName(), Log4j2Logger.class) 

Может быть, это то, что они пытались объяснить в extending section, и я не понимаю, пока нет. Кто-нибудь знает, как это сделать?

С уважением Christian

Обновление: Я пропустил сказать, причина, почему я использую обертку из-за существующего Projekt с log4j (1.2) с оберткой.

ответ

0

Если вы посмотрите документацию для AbstractLoggerWrapper:

обертка класс, который предоставляет защищенные методы AbstractLogger для поддержки обернутых лесорубов.

Вы увидите четкое указание, почему это делается так, как это делает Apache. Если вместо этого вы решили игнорировать контракт интерфейса и идти своим собственным путем, вы, по сути говоря,

«Меня не волнует, как библиотека делает вещи, которые я знаю лучше»

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

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

+0

Я совсем не знаю, как это лучше, вот почему я спрашиваю, как правильно использовать его. :) –