ארכיון

רשומות עם התג ‘log4net’

log4net – המדריך למלגלג (חלק 1 – מבוא)

23 אוקטובר, 2009 אין תגובות

בפוסט הזה:

  • מבוא
  • למה בכלל לכתוב ללוג?
  • סוגי הודעות לפי רמות חוּמרה
  • מה כותבים ללוג

מבוא

חלק בלתי נפרד מאפליקציה רצינית הוא הלוג – שירות שמאפשר כתיבת הודעות.
בזמן שהאפליקציה חיה ונושמת היא יכולה לכתוב הודעות שונות ללוג. ההודעות יכולות להיות בסגנון "עכשיו מתבצע כך וכך" או "יש כאן שגיאה לא צפויה".
הלוג עצמו יכול להישמר כקובץ, או קבצים, או כרשומות ב DB.
או שהלוג יכול לא להישמר כלל, אלא רק סוג של Console.WriteLine או Debug.WriteLine או Trace.WriteLine.
או שהלוג שולח את ההודעות באמצעות TCP או UDP למקום אחר.
או שהלוג שולח מייל למישהו…
בקיצור, יש את העניין של לכתוב ללוג ("יש כאן שגיאה לא צפויה"), ויש את העניין של מה תהיה התוצאה של הכתיבה ללוג (ההודעות נשמרות/מוצגות וכד').
בנוסף לכל זה, גם אם כתבנו ללוג והכל טוב ויפה, נרצה אח"כ גם לצפות בתוצאה, ולעשות חיתוכים שונים. במילים אחרות, נרצה איזה Viewer – תוכנה נורמלית עם UI חביב שתאפשר לנו את התצוגה והחיתוכים.
אה, ועוד משהו. נרצה גם לוג מספיק חכם כך שאם נרצה לשנות את ההגדרות שלו לא נצטרך להוריד את האפליקציה ולטעון אותה מחדש.

אז מה היה לנו: הודעות ללוג ואיך הן "נכתבות", תוכנת viewer, טעינה חכמה אחרי שינוי ההגדרות.
כל זה ניתן למימוש בקלות עם log4net – תשתית מוכחת ועובדת ללוג, שהיא open source. אבל לפני הכל, עוד קצת מבוא.

למה בכלל לכתוב ללוג?

שאלה טובה.

לא חייבים.

אבל הנסיון שלי מראה שכתיבה מושכלת ללוג מאפשרת למפתחים להבין באגים (ולפתור אותם) מהר יותר, בהשפעה אפסית על הביצועים.

בנוסף, קהל היעד של הלוג הוא לא רק מפתחים. גם אנשי IT או אנשים שמתחזקים את האפליקציה יכולים להעזר בו.

בשורה התחתונה, כתיבה ללוג היא גם כדי לוודא שהאפליקציה עובדת כמצופה וגם כדי לתעד מצבים לא תקינים ואת אפשרויות הטיפול בהם.

סוגי הודעות לפי רמות חוּמרה

רגע לפני שמתחילים, כמה מילים על ההודעות השונות שאנחנו מכניסים ללוג.

ב log4net, ולא רק שם, ההודעות ללוג מתחלקות לסוגים הבאים:

  • Debug
  • Info
  • Warn
  • Error
  • Fatal

נרחיב קצת…

הודעות Debug (ורק הן) מיועדות למפתחים עצמם, ואפשר להשתולל איתן כמה שרוצים. כפי שנראה מאוחר יותר, אפשר לשנות את ההגדרות כך ש log4net יתעלם מהן לחלוטין. בד"כ כותבים ל Debug הודעות כמו "עכשיו לפני פתיחת חיבור ל DB" ו"התחברתי בהצלחה ל DB" וכו'. בקיצור, אבני דרך למפתחים עצמם.

הודעות Info מכילות מידע מתומצת על המצב של האפליקציה, שהוא בחזקת "טוב לדעת". לדוגמה, כמעט כל service (או console שמדמה service) שכתבתי בדוט נט קורא את הקונפיגורציה ומיד אח"כ כותב הודעת info ללוג בנוסח "שירות xyz עלה בהצלחה עם ההגדרות הבאות: …".

הודעות Warn מתייחסות למקרים שבהם האפליקציה נתקלה ב exception או במצב לא תקין, אבל היא יודעת להתאושש ממנו. למשל, המערכת שלנו לא מצליחה להוציא מייל כרגע. לא נורא, היא תנסה שוב עוד דקה.

הודעות Error מתייחסות למקרים שבהם האפליקציה נתקלת ב exception או במצב לא תקין והיא לא יודעת להתאושש ממנו. זה יכול להשפיע רק על המשתמש הנוכחי (נניח אם זו אפליקציית web) וזה יכול להיות משהו יותר תשתיתי.

הודעות Fatal מתייחסות למקרי קצה שבהן האפליקציה שלנו לא יכולה להתאושש ממשהו לא תקין וכדאי שמישהו יסדר את זה בהקדם האפשרי. כלומר יש כאן גם הנחיה לגבי ניתוח הלוג וטיפול בשגיאות. הודעות Fatal צריכות להיות בודדות כדי לא ליצור מצב של "זאב-זאב".

מה כותבים ללוג

אם אתם לוקחים אתכם משהו מהפוסט הזה – קחו את זה: לא רק כותבים ללוג "היתה כאן שגיאה" ומצרפים את האובייקט של ה exception. כותבים את כל הקונטקסט הרלוונטי כדי שאח"כ נוכל להבין טוב יותר מה קרה. למשל "לא הצלחתי לקרוא את התוכן של הקובץ X כאשר הבקשה היתה Y" בצירוף ה exception. כן, זה לוקח עוד דקה, אבל זה כל כך שווה את זה.

אלא שלפעמים, מטעמי security או privacy לא כדאי לכתוב ממש הכל. למשל, "לא הצלחתי להתחבר ל SQL Server שנמצא בכתובת X עם שם משתמש U וסיסמה P" נשמע לי רעיון לא טוב, כי זה חושף את פרטי ההתחברות ל DB כולל הסיסמה. אפשר אולי במקום לכתוב את הסיסמה לכתוב את ה hash שלה לפי הדוט נט (GetHashCode), או לפי סטנדרט חזק יותר כמו MD5, כאשר כותבים את ערך ה hash ב base64 (וגם אז, אפשר לכתוב רק את N התוים הראשונים מטעמי חסכון ונוחות קריאה).

זהו, עד כאן המבוא. בפוסטים הבאים – איך משתמשים ב log4net כדי לכתוב ללוג, איזה viewer-ים קיימים ועוד.

קטגוריות:תכנות תגיות:
Quantcast