Как добавить перехватчик регистрации для KTOR? - PullRequest
0 голосов
/ 05 июня 2019

Когда я использовал Retrofit, я мог легко создавать перехватчики регистрации, чтобы видеть вызовы с телом и заголовками на logcat:

 val loggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
            val httpClient = OkHttpClient.Builder()
                    .addInterceptor(loggingInterceptor)

, а затем

 val retrofit = retrofit2.Retrofit.Builder()
                    .client(httpClient.build())

Теперь мы перешли на Ktor и я не знаю Я не знаю, как

  • использовать addInterceptor()?
  • и для [install(CallLogging)] [2] ничего не происходит ..

Есть предложения или примеры?

[2] источник:

fun Application.main() {
    install(CallLogging){
        level = Level.TRACE
    }
}

1 Ответ

0 голосов
/ 07 июня 2019

Вы настраивали свою регистрацию? Ktor предоставляет только API SLF4J. Когда вы запускаете сервер, вы должны увидеть это:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Это означает, что вам нужно поместить реализацию logger в classpath.

Самый быстрый вариант - implementation 'org.slf4j:slf4j-simple:1.7.26'.

Теперь вы должны получить некоторые журналы с сервера.

Однако по умолчанию регистрируются только звонки.

Заголовки и тело не зарегистрированы.

IIRC тело можно употреблять только один раз, но, возможно, что-то изменилось.

Заголовки могут быть зарегистрированы с пользовательским перехватчиком.

Например:

call.request.headers.entries()
    .map { it.key to it.value.joinToString(",") }
    .joinToString(";") { "${it.first}:${it.second}" }
...