2015-03-20 2 views
1

Я использую Retrofit в приложении Java для доступа к api-rest.Retrofit - Log4j

Я использую простой код:

RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.HEADES_AND_ARGS).setConverter(new GsonConverter(gson)).setClient(httpClient).build(); 

возможен журнал отображение дооснащения в LOG4J?

+1

Если у вас есть какой-либо вопрос или вам нужно объяснение, пожалуйста, задайте вопрос: –

+0

сгенерированный журнал от модификации не является оберткой для log4j. как упаковать в log4j? – Furetto

+0

Я знаю, что вам нужно создать обертку. Посмотрите на мой пост Я обновлю его –

ответ

2

вы можете также использовать журнал из okhttp, снимок от версии 2.6.0, которая вводится в версию бета-версии модификации и собирается жить в ближайшее время, в настоящее время работает нормально, вы можете увидеть, как ее реализовать в этом руководстве https://futurestud.io/blog/retrofit-2-log-requests-and-responses/ довольно проста в использовании и проста в использовании.

0

У RestAdapter.Builder есть способ setLog(Log) который имеет интерфейс RestAdapter.Log как параметр. Этот интерфейс выглядит следующим образом:

/** Simple logging abstraction for debug messages. */ 
    public interface Log { 
    /** Log a debug message to the appropriate console. */ 
    void log(String message); 
    } 

Вы можете установить LogLevel как f.e. FULL и создать класс, который обертывает log4j и реализует интерфейс Log и регистрирует ваши журналы в log(String), но вы получите все журналы как строку. Невозможно проверить, с какого уровня идет журнал.

Пример WRAPPER

public class ExampleLog4J implements RestAdapter.Log { 
    private static final Logger logger = logger.getLogger(ExampleLogger.class) 
    ExampleLog4J(){ 
    } 
    @Override 
    public void log(String message) { 
     log.info("Retrofit# "+message); 
    } 
} 

И в том месте, где вы создаете использование RestAdapter:

new RestAdapter.Builder().setLog(new ExampleLog4J()). 
+0

public class RetrofitLogger реализует журнал { закрытый статический окончательный журнал регистрации logger = logger.getLogger (RetrofitLogger.class); @Override общественный журнал недействительности (сообщение строки) { \t logger.info (сообщение); \t } – Furetto

+0

Правильно :) –

0

Вы можете сделать что-то, как показано ниже:

new RestAdapter.Builder() 
    .setLogLevel(LOGGER.isDebugEnabled() ? retrofit.LogLevel.FULL : retrofit.LogLevel.BASIC) 
    .setLog(LOGGER.isDebugEnabled() ? LOGGER::debug : LOGGER::info) 

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

Реализация retrofit.RestAdapter.Log передается в setLog() от RestAdapter. RestAdapter делегирует все свое внутреннее ведение журнала log4j Logger в этом случае.

Здесь LOGGER является то, что вы бы инициализировать, как показано ниже

private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(SomeClass.class); 

LOGGER::debug в Java 8 эквивалентно ниже анонимного класса

new retrofit.RestAdapter.Log() { 
     @Override 
     public void log(String message) { 
      LOGGER.debug(message); 
     } 
}