Elixir:
לוגים

איך לעשות זאת:

ב-Elixir, הדרך העיקרית לרשום מידע היא דרך מודול ה-Logger המובנה. כך תוכלו להשתמש בו:

defmodule MyApplication do
  require Logger

  def do_something_important(param) do
    Logger.info("מתחיל תהליך חשוב עם פרמטר: #{param}")

    # סימולציה של עבודה שנעשית
    :timer.sleep(1000)

    Logger.debug("התהליך הושלם.")
  rescue
    error -> Logger.error("אירעה שגיאה: #{inspect(error)}")
  end
end

# כדי לראות את הלוגים שלך, פשוט קרא לפונקציה:
MyApplication.do_something_important("MyParam")

קטע קוד זה מראה איך לרשום ברמות שונות (info, debug, ו-error). כאשר אתם מריצים את זה, לא תראו את ההודעה debug אלא אם תקנפגו את רמת ה-Logger ל-:debug. כברירת מחדל, Logger של Elixir מסנן הודעות לוג מתחת ל-:info.

דוגמת פלט ברמת :info עשויה להיראות כך:

14:32:40.123 [info]  מתחיל תהליך חשוב עם פרמטר: MyParam
14:32:41.126 [error] אירעה שגיאה: %RuntimeError{message: "שגיאת ריצה"}

נסיון עמוק יותר:

Logger ב-Elixir הוא כלי מובנה שהיה חלק מהשפה מתחילת דרכה. הוא מושפע מהמערכות הלוגים של שפות BEAM אחרות כמו Erlang. הלוגר מספק רמות לוגים שונות – :debug, :info, :warn, ו-:error – והוא ניתן להתקנה, מאפשר לחבר backends שונים לטיפול בהודעות הלוג.

אלטרנטיבה ל-Logger המובנה לסצנריות מורכבות יותר היא שימוש בספריות לוגים כגון Logstash או Sentry ל-Elixir, שיכולות לספק יכולות נוספות כמו מעקב אחרי שגיאות ואגרוגציה בפורמט יותר ויזואלי. לפיתוח מקומי, מפתחי Elixir לעיתים נשענים על הפונקציונליות המובנית של Logger בשל פשטותה ואינטגרציה עם מכונת ה-BEAM VM.

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

ניתן להתאים את תצורת Logger בקובץ config/config.exs של אפליקציה ב-Elixir, שם תוכלו לקבוע את רמת הלוגים, הפורמט, מטא־דאטה, ועוד. תמיד זכרו לכוון מחדש את רמת הלוגים והפלטים לסביבות שונות; אינכם רוצים שלוגים רבי פרטניות של דיבאג יציפו את מערכות הייצור שלכם.

ראה גם: