Дооснащение - Log4j

1

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

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

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

возможно отображение модифицированного журнала в log4j?

  • 1
    Если у вас есть какие-либо вопросы или вам нужны пояснения, пожалуйста, задавайте :)
  • 0
    журнал, созданный из модернизации, не переносится в log4j. как обернуть в log4j?
Показать ещё 1 комментарий
Теги:
log4j
retrofit

3 ответа

2
Лучший ответ

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

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 делегирует все свое внутреннее ведение журнала 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);
      }
 }
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 как 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()).
  • 0
    открытый класс RetrofitLogger реализует Log {private static final Logger logger = logger.getLogger (RetrofitLogger.class); @Override public void log (String message) {logger.info (message); }}
  • 0
    Верно :)

Ещё вопросы

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