LoggingInterceptor - Interceptor for OkHttp3 with pretty logger
val client = OkHttpClient.Builder() client.addInterceptor(LoggingInterceptor.Builder() .setLevel(Level.BASIC) .log(VERBOSE) .addHeader("cityCode","53") .addQueryParam("moonStatus", "crescent") .build())Gradle:
Groovy
allprojects { repositories { maven { url 'https://jitpack.io' } } } dependencies { implementation('com.github.ihsanbal:LoggingInterceptor:4.0.0') { exclude group: 'org.json', module: 'json' } }kotlin DSL
allprojects { repositories { maven { setUrl("https://jitpack.io") } } } dependencies { implementation("com.github.ihsanbal:LoggingInterceptor:4.0.0") { exclude(group = "org.json", module = "json") } } This fork adds a sink(...) API so you can batch a whole request/response block before logging to avoid interleaving in Logcat. Example (using the bundled BatchingSink, now public):
val sink = BatchingSink(LogSink { type, tag, message -> // Logcat truncates ~4k per line; forward to your own chunker if needed Log.println(type, tag, message) }) val client = OkHttpClient.Builder() .addInterceptor( LoggingInterceptor.Builder() .setLevel(Level.BODY) .log(Log.DEBUG) .sink(sink) .build() ) .build() If you need chunking/queuing (e.g., Logcat 4k limit), wrap the `LogSink` to your own queue before passing to `BatchingSink`, similar to the sample above.If you want the forked artifact via JitPack:
allprojects { repositories { maven { setUrl("https://jitpack.io") } } } dependencies { implementation("com.github.rtsketo:LoggingInterceptor:3.1.0rt6") { exclude(group = "org.json", module = "json") } }Maven:
<repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> <dependency> <groupId>com.github.ihsanbal</groupId> <artifactId>LoggingInterceptor</artifactId> <version>4.0.0</version> </dependency>LoggingInterceptor.Builder() //Add logger to print log as plain text .logger(object : Logger { override fun log(level: Int, tag: String?, msg: String?) { Log.e("$tag - $level", "$msg") } }) //Enable mock for develop app with mock data .enableMock(BuildConfig.MOCK, 1000L, object : BufferListener { override fun getJsonResponse(request: Request?): String? { val segment = request?.url?.pathSegments?.getOrNull(0) return mAssetManager.open(String.format("mock/%s.json", segment)).source().buffer().readUtf8() } })setLevel(Level.BASIC) .NONE // No logs .BASIC // Logging url,method,headers and body. .HEADERS // Logging headers .BODY // Logging bodyPlatform - Platform
log(Platform.WARN) // setting log typetag("LoggingI") // Request & response each log tag request("request") // Request log tag response("response") // Response log tag Header - Recipes
addHeader("token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ") // Adding to requestSome tips about log at this blog post: “The way to get faster on development.”
Also use the filter & configure logcat header for a better result


