Auth0.Android icon indicating copy to clipboard operation
Auth0.Android copied to clipboard

Overrides HttpLoggingInterceptor or Logger on DefaultClient

Open RafaelMagalhaesN opened this issue 1 year ago • 3 comments

Checklist

  • [X] I have looked into the Readme, Examples, and FAQ and have not found a suitable solution or answer.
  • [X] I have looked into the API documentation and have not found a suitable solution or answer.
  • [X] I have searched the issues and have not found a suitable solution or answer.
  • [X] I have searched the Auth0 Community forums and have not found a suitable solution or answer.
  • [X] I agree to the terms within the Auth0 Code of Conduct.

Describe the problem you'd like to have solved

Hello, I'm looking at the DefaultClient implementation, and there isn't a way to override logs emitted by Auth0 requests. In the current implementation, the HttpLoggingInterceptor has been built inside the init of DefaultClient and cannot be overridden. And I don't want to implement something similar to this just to override the log output. We need it in the company to logs out a few breadcrumbs to our secure log vault.

Describe the ideal solution

I'd suggest to include two different ways: 1:

package com.auth0.android.request
// code..
public class DefaultClient @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal constructor(
    connectTimeout: Int,
    readTimeout: Int,
    private val defaultHeaders: Map<String, String>,
    enableLogging: Boolean,
    private val gson: Gson,
    sslSocketFactory: SSLSocketFactory?,
    trustManager: X509TrustManager?,
    logger: HttpLoggingInterceptor = Interceptor = HttpLoggingInterceptor()
            .setLevel(HttpLoggingInterceptor.Level.BODY)
) : NetworkingClient {
// code 
   init {
        // code
        if (enableLogging) {
          // remove it
          //  val logger: Interceptor = HttpLoggingInterceptor()
           //    .setLevel(HttpLoggingInterceptor.Level.BODY)
            builder.addInterceptor(logger)
        }

        // code
    }
  

}

or

2:

package com.auth0.android.request
// code..
public class DefaultClient @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal constructor(
    connectTimeout: Int,
    readTimeout: Int,
    private val defaultHeaders: Map<String, String>,
    enableLogging: Boolean,
    private val gson: Gson,
    sslSocketFactory: SSLSocketFactory?,
    trustManager: X509TrustManager?,
    defaultLogger: Logger = Logger.DEFAULT
) : NetworkingClient {
// code 
   init {
        // code
        if (enableLogging) {
          
            val logger: Interceptor = HttpLoggingInterceptor(defaultLogger)
                  .setLevel(HttpLoggingInterceptor.Level.BODY)
            builder.addInterceptor(logger)
        }

        // code
    }
  

}

Alternatives and current workarounds

That is possible to create a custom NetworkingClient object and that include the HttpLoggingInteceptor by my own, but for a simple log, I guess DefaultClient could provide it

Additional context

We are going to use it in our Dev Env

RafaelMagalhaesN avatar Oct 03 '24 22:10 RafaelMagalhaesN

Hi @RafaelMagalhaesN Apologies for the late reply. Thanks for bringing this to our notice. We will plan to accomodate this as part of our roadmap for the coming year

pmathew92 avatar Dec 11 '24 07:12 pmathew92

We have planned to add support to this feature as part of the next major version release of the SDK.

pmathew92 avatar Jul 11 '25 06:07 pmathew92

Thank you @pmathew92 👍🏾

RafaelMagalhaesN avatar Jul 15 '25 17:07 RafaelMagalhaesN