برنامه نویسیجاوامیم تک 8

کلیاتی از عملیات logging در جاوا و معرفی log4j2

کلیاتی از عملیات logging در جاوا و معرفی log4j2

وقتی شما برنامه ای می نویسید، خطا های زمان اجرای آن را در صفحه ی کنسول دیده می شود. علاوه بر آن می توان روال اجرای برنامه را نیز با نوشتن دستور System.out.println() در جاهای مختلف از کد برنامه و مشاهده خروجی آن در صفحه کنسول دنبال کرد. اما اصلی سوال اینجاست که بعد از تحویل برنامه به مشتری درصورت بروز مشکل چطور از محل و علت خطای رخ داده مطلع شویم؟ چطور روال اجرای برنامه را زمان استفاده ی آن توسط مشتری بررسی کنیم؟ اینجاست که ما به مفهومی به نام log نیاز داریم . در ادامه به بررسی Log و همچنین کتابخانه log4j2 می پردازیم.

Log چیست ؟

ترجمه ی فارسی کلمه ی log ” ثبت وقایع” است. با استفاده از log اطلاعاتی را که هنگام بروز مشکل در برنامه بتوان برای رفع ایراد از آنها کمک گرفت، ثبت کنیم. تفاوت نوشتن log برای یک برنامه و ننوشتن آن را می توان با مثال صرف زمان 5 دقیقه برای رفع یک ایراد یا زمان 5 ساعتی برای آن توصیف کرد.البته باید به این هم توجه کنید، این که شما برای یک برنامه log بنویسید لزوما به این معنی نیست که شما می توانید سریعا به مشکل رخ داده برسید، این موضوع به مهارت شما در نوشتن log از روال اجرای برنامه نیز بر می گردد . در سرفصل بعد به نکاتی که بهتر است زمان نوشتن log برای یک برنامه رعایت شود اشاره می کنیم .

نکاتی که نباید در مورد Log فراموش شود :
  1. موضوع اولی که باید مورد بررسی قرار گیرد نحوه ی نوشتن log است. log باید به صورتی نوشته شود که هر کس دیگری غیر از شما هم آن را بخواند متوجه شود. به یاد داشته باشید همیشه شما نیستید که فایل log را میخوانید، خواننده ی فایل می تواند همکار شما یا حتی فردی در شرکت طرف قرار داد شما باشد.
  2. از نوشتن اطلاعات مهم و امنیتی مربوط به کاربران برنامه یا خود برنامه در فایل log تا آنجا که ممکن است پرهیز کنید.
  3. موضوع بعدی مدیریت اندازه ی فایل های ذخیره سازی log هاست. اگر اندازه این فایل ها بزرگ باشد و متن زیادی در آن نوشته شده باشد بررسی کردن آن ها دشوار است. بهتر است تنظیماتی انجام دهیم که اطلاعات مربوط به هر بازه ی زمانی مشخص در فایل جداگانه ذخیره شود. به طور مثال اطلاعات هر هفته یا هر روز در یک فایل جدا ذخیره شود.
  4. زیاد ننویسیم کم هم ننویسیم. نوشتن بیش از اندازه ی اطلاعات در log کار را سخت می کند.

یکی از کتابخانه هایی که با کمک آن می‌‌ توانیم log های برنامه را ثبت کنیم و موارد بالا را توسط آن مدیریت کنیم کتابخانه log4j است.

log4j2 چیست ؟

کتابخانه ی log4j یکی از کتابخانه های محبوب مدیریت log برنامه است. نسخه آخر این کتابخانه تحت  عنوان log4j2 منتشر شده است. برای کار با آن باید فایل jar به نام log4j-core  را به برنامه اضافه کنید در صورتی که از Maven یا Gradle استفاده می کنید هم تنظیمات مربوط به آن ها را انجام دهید. Log4j2  به صورت پیش فرض تنظیماتی دارد که در صورت تغییر نکردن تنظیمات توسط شما بر همان اساس کار می کند.

موارد قابل تغییر در Log4j2 :

log4j2 از سه بخش اساسی تشکیل شده است.

در صورتی که بخواهید آن را براساس نیاز خودتان تغییر دهید باید در این 3 بخش تنظیمات را اعمال کنید. این کار را می توانید با نوشتن فایل تنظیمات و یا  نوشتن کد انجام بدهید. این کتابخانه فایل تنظیمات با فرمت های XML, JSON, .properties  را می پذیرد.

در ادامه توضیحاتی در مورد این 3 بخش می دهیم :

  • Loggers :

این بخش مسئولیت ثبت رخ داد و یا اطلاعات درون برنامه به صورت یک پیام متنی دارد. پیام ها  سطوح مختلفی دارند:

  • FATAL : پیام هایی که باید در صورت خاتمه ی اجرای یک برنامه یا به اصطلاح crash کردن آن ذخیره شوند.
  • ERROR : پیام هایی که درصورت رخ داد خطاهای فنی باید ذخیره شود. خطا های فنی باعث توقف اجرای برنامه نمی شوند ولی برای عملکرد صحیح برنامه نیاز است برطرف شوند.
  • WARN : پیام هایی که برای پیگیری کردن رفتار های خارج از انتظار برنامه ثبت می شود.
  • INFO : این پیام ها برای کنترل روال اجرای برنامه ثبت می شوند.
  • DEBUG : پیام هایی که در هنگام دیباگ برنامه به کار می آیند. به طور مثال ثبت شروع و خاتمه ی یک تابع
  • TRACE : پیام هایی در سطح دیباگ است ولی جزئیات بیشتری را درون خود ذخیره می کند.
  • Appenders :

این بخش مسئولیت انتقال پیام log را به یک مقصد مشخص دارد. این مقصد می تواند فایل، بانک اطلاعات و… باشد.

  • ConsoleAppender : پیام های  را در کنسول سیستم نمایش می دهد.
  • FileAppender  : پیام ها را در فایلی که ما مشخص می کنیم ذخیره می کند.
  • RollingFileAppender : پیام ها در براساس تنظیمات مربوط به زمان یا حجم در فایل های متفاوت ذخیره می کند.
  • JDBCAppender  : پیام ها در جداول رابطه ای ذخیره می کند.
  • Layouts :

این بخش برای آن است که به appneder بگوید پیامی که می خواهد به مقصد منتقل کند به چه فرمتی باشد :

  • PatternLayout : فرمت پیام log  رو در صورتی که بخواهیم به صورت رشته ذخیره شود با این بخش تنظیم می کنیم.
  • JsonLayout : به کمک این بخش می توانیم فرمت json مد نظرمان برای ذخیره سازی پیام ها را تنظیم کنیم.

ارسال پاسخ