Skip to content

ihsanbal/LoggingInterceptor

Repository files navigation

LoggingInterceptor - Interceptor for OkHttp3 with pretty logger

Android Arsenal API SwaggerUI

Usage

val client = OkHttpClient.Builder() client.addInterceptor(LoggingInterceptor.Builder() .setLevel(Level.BASIC) .log(VERBOSE) .addHeader("cityCode","53") .addQueryParam("moonStatus", "crescent") .build())

Download

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") } } 

Batching and custom sinks (fork feature)

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>

Logger & Mock Support

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() } })

Level

setLevel(Level.BASIC) .NONE // No logs .BASIC // Logging url,method,headers and body. .HEADERS // Logging headers .BODY // Logging body

Platform - Platform

log(Platform.WARN) // setting log type

Tag

tag("LoggingI") // Request & response each log tag request("request") // Request log tag response("response") // Response log tag 

Header - Recipes

addHeader("token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 ") // Adding to request

Notes

Some 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

About

An OkHttp interceptor which has pretty logger for request and response. +Mock support

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages