لاگ گیری از ریکوئست های Retrofit

گرفتن لاگ به صورت اتوماتیک برای تمامی ریکوئست‌ها
گرفتن لاگ به صورت اتوماتیک برای تمامی ریکوئست‌ها


زمانی‌که حرف ریکوئست‌های سمت سرور پیش می‌آید، همیشه با دیتاهایی به شکل JSON مواجه می‌شویم.

لاگ گرفتن دستی از خروجی‌های تمامی ریکوئست‌ها، کار سخت و زمان‌گیری است. این کار موجب‌ می‌شود نه تنها کدها زیاد شوند بلکه نگهداری آن‌ها نیز سخت‌تر می‌شود.

اگر از کتابخانه Retrofit برای ارسال و دریافت ریکوئست‌هایتان از سرور استفاده می‌کنید، این کتابخانه یک ویژگی فوق العاده به نام Interceptor‌ها دارد. Interceptor به معنای دخالت‌گر است. این ویژگی زمانی‌که هنوز Interface‌های معروف Retrofit یعنی OnResponse و OnFailure جوابی در اختیار ما قرار نداند، دخالت می‌کند.

کاری که این کتابخانه انجام می‌دهد، لاگ گرفتن از خروجی ریکوئست هر چیزی و با هر فرمتی است. این بدین معنی است که نیازی نیست شما دستی، تک تک ریکوئست‌ها را لاگ گیری کنید.

مراحل پیاده سازی را یک به یک جلو میرویم.




اضافه کردن کتابخانه به پروژه

می توانید از این صفحه نسخه آخر این کتابخانه را پیدا کنید.

implementation(&quotcom.squareup.okhttp3:logging-interceptor:4.8.1&quot)


ایجاد و تخصیص سطح دسترسی

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

اگر می‌خواهید لاگ‌ها فقط زمانی‌ نمایش داده شوند که اپلیکیشن در مرحله دیباگ (نه ریلیز) است، از این تکه کد استفاده کنید. (پیشنهاد من: تنظیمات زیر را حتما اعمال کنید)

if (BuildConfig.DEBUG) {
    interceptor.level(HttpLoggingInterceptor.Level.BODY);
} else {
    interceptor.level(HttpLoggingInterceptor.Level.NONE);
}


اضافه کردن Interceptor به OkHttpClient.Builder

OkHttpClient.Builder httpClientBuilder = new OkHttpClient().newBuilder().addInterceptor(interceptor);

تماااام.

شما به همین راحتی می‌توانید این کار را انجام دهید. زمانی‌که ریکوئستی ارسال یا دریافت می‌شود، در Logcat عبارت okhttp را بنویسید تا لاگ ریکوئست‌های شما نمایش داده شود.

به عنوان مثال

لاگ کت در حالت verbose قرار دارد
لاگ کت در حالت verbose قرار دارد




پی نوشت

در صفحه خود این کتابخانه به این موضوع اشاره شده است که چون Header و بعضی از دیتاهای حیاتی و مهم را هم لاگ گیری می‌کند، مواظب نوع استفاده از این کتابخانه باشید. این کتابخانه برای این مشکل هم یک راه‌حل ارائه داده است. شما می‌توانید کلمه کلیدی خود را برای این‌که در لاگ‌ها نمایش داده نشود، با استفاده از تکه کد زیر اضافه کنید.

بدین صورت:

logging.redactHeader(&quotAuthorization&quot);
logging.redactHeader(&quotCookie&quot);




می‌توانید کد کامل کلاس را اینجا پیدا کنید.

به نظر شما چه کدها و روش‌های جایگزینی برای این موضوع وجود دارد؟ شما روش بهتری برای این کار سراغ دارید؟