diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c57076106..b4c54d034 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -245,6 +245,7 @@ dependencies { implementation(libs.coil.gif) implementation(libs.ktor) + implementation(libs.ktor.client.logging) implementation(libs.ktor.content.negotiation) implementation(libs.ktor.serialization) diff --git a/app/src/main/java/org/tasks/http/HttpClientFactory.kt b/app/src/main/java/org/tasks/http/HttpClientFactory.kt index 479ee4730..754a03df0 100644 --- a/app/src/main/java/org/tasks/http/HttpClientFactory.kt +++ b/app/src/main/java/org/tasks/http/HttpClientFactory.kt @@ -10,7 +10,11 @@ import io.ktor.client.plugins.HttpTimeout import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.cookies.HttpCookies import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging import io.ktor.client.request.header +import io.ktor.http.HttpHeaders import io.ktor.serialization.kotlinx.json.json import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -18,6 +22,7 @@ import kotlinx.serialization.json.Json import net.openid.appauth.AuthState import okhttp3.OkHttpClient import okhttp3.internal.tls.OkHostnameVerifier +import org.tasks.BuildConfig import org.tasks.DebugNetworkInterceptor import org.tasks.caldav.TasksCookieJar import org.tasks.data.entity.CaldavAccount @@ -26,6 +31,7 @@ import org.tasks.preferences.Preferences import org.tasks.security.KeyStoreEncryption import org.tasks.sync.microsoft.MicrosoftService import org.tasks.sync.microsoft.requestTokenRefresh +import timber.log.Timber import javax.inject.Inject import javax.net.ssl.SSLContext @@ -122,6 +128,16 @@ class HttpClientFactory @Inject constructor( } install(HttpErrorHandler) + + install(Logging) { + logger = object : Logger { + override fun log(message: String) { + Timber.d(message) + } + } + level = if (BuildConfig.DEBUG) LogLevel.ALL else LogLevel.HEADERS + sanitizeHeader { header -> header == HttpHeaders.Authorization } + } } return MicrosoftService( client = client diff --git a/deps_fdroid.txt b/deps_fdroid.txt index 22d3c5bae..9b60c595a 100644 --- a/deps_fdroid.txt +++ b/deps_fdroid.txt @@ -1444,6 +1444,13 @@ +| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-client-logging:3.0.3 ++| \--- io.ktor:ktor-client-logging-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-client-core:3.0.3 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++--- io.ktor:ktor-client-content-negotiation:3.0.3 +| \--- io.ktor:ktor-client-content-negotiation-jvm:3.0.3 +| +--- org.slf4j:slf4j-api:2.0.16 diff --git a/deps_googleplay.txt b/deps_googleplay.txt index 1b645784c..b6c3e5550 100644 --- a/deps_googleplay.txt +++ b/deps_googleplay.txt @@ -1752,6 +1752,13 @@ +| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.1.0 (*) +| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) +| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) +++--- io.ktor:ktor-client-logging:3.0.3 ++| \--- io.ktor:ktor-client-logging-jvm:3.0.3 ++| +--- org.slf4j:slf4j-api:2.0.16 ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:1.9.0 (*) ++| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 (*) ++| +--- io.ktor:ktor-client-core:3.0.3 (*) ++| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.1.0 (*) ++--- io.ktor:ktor-client-content-negotiation:3.0.3 +| \--- io.ktor:ktor-client-content-negotiation-jvm:3.0.3 +| +--- org.slf4j:slf4j-api:2.0.16 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eb02d12f4..cd01aca50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -148,6 +148,7 @@ kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version kotlinx-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.3.8" } kotlinx-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.7.3" } ktor = { module = "io.ktor:ktor-client-android", version.ref = "ktor" } +ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor-serialization = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } leakcanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" }