استفاده از Log برای رفع مشکلات برنامه
با استفاده از لاگ (Log)، میتوانیم اطلاعاتی را که هنگام بروز مشکل در برنامه برای رفع ایراد به آنها نیاز داریم، ثبت کنیم.
نوشتن لاگ چه دستاوردی برای تیم توسعه دارد؟
اگر به درستی لاگها را در برنامه خود ثبت کرده باشید، معمولاً مشکلات پیشآمده در محیط پروداکشن را میتوانید در کمتر از 5 دقیقه تشخیص دهید. اما اگر لاگها را ثبت نکرده باشید، احتمالاً باید ساعتها سردرگم به دنبال مشکل بگردید.
توجه داشته باشید که نوشتن لاگ لزوماً به معنای رسیدن سریع به مشکل نیست. این موضوع به مهارت شما در نوشتن لاگهای کاربردی و مفید بستگی دارد.
معرفی Logging in ASP.NET Core
در فصل دوم دوره رایگان آموزش ASP.NET Core در سایت باگتو، مبحث Logging in Asp.Net Core به طور کامل آموزش داده شده است. برای آشنایی بیشتر، میتوانید این بخش از دوره را مشاهده کنید.
معرفی Logging in ASP.NET Core
در فصل دوم دوره رایگان آموزش ASP.NET Core در سایت باگتو، مبحث Logging in Asp.Net Core به طور کامل آموزش داده شده است. برای آشنایی بیشتر، میتوانید این بخش از دوره را مشاهده کنید.
نکاتی که نباید در مورد Log فراموش کنید
نحوه نوشتن لاگ: لاگ باید به گونهای نوشته شود که هر کسی جز شما هم بتواند آن را بخواند و متوجه شود. به یاد داشته باشید که همیشه شما نیستید که فایل لاگ را میخوانید؛ خواننده ممکن است همکار شما یا حتی فردی از شرکت طرف قرارداد باشد.
امنیت اطلاعات: تا حد امکان از نوشتن اطلاعات مهم و امنیتی مربوط به کاربران یا خود برنامه در فایل لاگ پرهیز کنید.
مدیریت اندازه فایل لاگ: اگر اندازه فایلهای لاگ بسیار بزرگ باشد، بررسی آنها دشوار خواهد بود. بهتر است تنظیماتی انجام دهید که اطلاعات هر بازه زمانی مشخص در فایل جداگانه ذخیره شود، مانند ثبت اطلاعات هر هفته یا هر روز در فایلهای جداگانه.
تعادل در لاگنویسی: نه بیش از حد و نه خیلی کم لاگ ننویسید. نوشتن اطلاعات بیش از حد در لاگها باعث دشواری در تحلیل و بررسی آنها میشود.
من مطمئن هستم که هر مهندس نرمافزاری در شرایطی غیرمنتظره قرار گرفته است که نتواند بفهمد در کد چه میگذرد؟
گاهی اوقات یک عبارت Insightful log میتواند برای پاسخ به این شرایط غیرمنتظره مفید باشد.
اجازه دهید به چند مورد بپردازیم که شخصاً آنها را پذیرفتهام و معتقدم که بهاندازه کافی مناسب هستند تا دیگران بتوانند برای logging مؤثر و قابل درک از آنها پیروی کنند.
توجه: هنگام نوشتن این مقاله، کتابخانه log4j در نظر گرفته شده است.
برخی از سطوح مورداستفاده رایج لاگ: FATAL، ERROR ، WARN ، INFO ، DEBUG ، TRACE.
تفسیر ساده پیامهای log levelsرایج:
لاگها بخش مهمی از هر نرمافزار هستند. در این مقاله درباره اینکه چگونه میتوان لاگها را مفیدتر کرد و مواردی که باید در نظر بگیرید یا از آنها اجتناب کنید، صحبت میکنیم. بسیاری از مهندسان نرمافزار تجربهای دارند که در شرایطی غیرمنتظره نتوانستهاند بفهمند در کد چه میگذرد؛ در چنین مواقعی یک لاگ هوشمندانه میتواند بسیار مفید باشد.
سطوح لاگها (Log Levels)
FATAL: نشاندهنده یک خطای بسیار جدی است که باید بلافاصله برطرف شود.
ERROR: نشاندهنده یک خطا در روند برنامه است که باید بررسی و رفع شود.
WARN: پیامهایی که رفتارهای غیرمنتظره را گزارش میکنند و به ما هشدار میدهند که باید احتیاط بیشتری کنیم.
INFO: حاوی پیامهای اطلاعاتی درباره عملکرد برنامه است که به ما کمک میکند بفهمیم برنامه در حال انجام چه کاری است.
DEBUG: نکات و اطلاعاتی برای توسعهدهنده در یافتن و رفع باگها.
TRACE: جزئیات دقیقتر برای تحلیلهای عمیقتر، بیشتر برای مواقع توسعه کاربرد دارد.
نکات مهم برای نوشتن لاگهای بهتر
متد toString()
برای مدلها: این کار برای قرار دادن دادههای مهم در گزارشها بسیار مفید است.
اضافه کردن داده و توضیحات: هر عبارت لاگ باید حاوی داده و توضیح کافی باشد تا قابل درک باشد.
ثبت وضعیت فراخوانی APIهای خارجی: در زمان استفاده از APIهای خارجی، همه اطلاعات مرتبط را لاگ کنید تا در صورت بروز مشکل بتوانید علت را پیدا کنید.
عدم تکرار لاگ Exception: هر Exception را فقط یک بار لاگ کنید تا باعث سوءتفاهم نشود.
قابل خواندن بودن لاگها: لاگها باید ساده و قابل فهم باشند.
استفاده از context برای ردیابی بهتر درخواستها: این کار به شما کمک میکند تا جریان هر درخواست را بهتر دنبال کنید.
مواردی که باید از آنها اجتناب کنید
استفاده نادرست از log.isDebugEnabled()
: تنها در مواردی از آن استفاده کنید که نیاز به محاسبه خاصی برای ثبت لاگ دارید.
عدم ترکیب رشتهها با +
: از جایگزینهایی مثل {}
استفاده کنید.
عدم اطمینان از نال نبودن اشیا: قبل از استفاده از obj.getAttribute()
مطمئن شوید که obj
نال نیست تا از بروز خطای NPE جلوگیری شود.
عدم ثبت بیش از حد اطلاعات: به جای ثبت کل اطلاعات، فقط شناسههای مورد نیاز را ثبت کنید.
عدم ثبت اطلاعات شخصی (PII): هیچ اطلاعات شخصی نباید در سیستم ثبت شود تا از نقض حریم خصوصی جلوگیری شود.
عدم لاگ کردن رمزها و کلیدهای امنیتی: اطلاعات محرمانه نباید لاگ شوند.
نتیجهگیری
لاگها باید به مهندسان نرمافزار کمک کنند تا بفهمند مشکل کجا و چرا پیشآمده است. اگر توسعهدهنده بتواند مشکلات را فقط از طریق لاگها پیدا کند، یعنی لاگهای خوبی نوشتهاید.
برای یادگیری بیشتر در زمینه مدیریت خطا و ثبت لاگ در برنامههای داتنت، میتوانید در دورههای ما شرکت کنید.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید