Я использую Retrofit в приложении Java для доступа к api-rest.
Я использую простой код:
RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.HEADES_AND_ARGS).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
возможно отображение модифицированного журнала в log4j?
вы также можете использовать журнал из okhttp, моментальный снимок из версии 2.6.0, который представлен в версии для модификации бета-версии и скоро вживую, в настоящее время работает нормально, вы можете увидеть, как реализовать его в этом руководстве https://futurestud.io/blog/retrofit-2-log-requests-and-answers/ довольно проста в использовании и проста в реализации.
Вы можете сделать что-то вроде ниже:
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
делегирует все свое внутреннее ведение журнала log8j Logger.
Здесь 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);
}
}
В 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 как fe 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()).