logo

Log4j לעומת SLF4J

SLF4J (חזית רישום פשוטה עבור ג'אווה) הוא API שנועד לתת גישה גנרית למסגרות רישום רבות, כאשר log4j היא אחת מהן.

זה בעצם שכבת הפשטה. זה לא יישום רישום. זה אומר שאם אתה כותב ספריה ואתה משתמש ב-SLF4J, אתה יכול לתת את הספרייה הזו למישהו אחר שישתמש והוא יכול לבחור באיזה מימוש רישום להשתמש עם SLF4J, למשל, log4j או ממשק ה-API לרישום של Java. הוא משמש כדי למנוע מיישומים להיות תלויים בממשקי API שונים של רישום בדיוק כפי שהם משתמשים בספריות התלויות בהם.

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

במקרה של Log4j , זהו רכיב רישום, והוא מבצע את הרישום שהונחה לעשות. אז אנחנו יכולים לומר ש-SLF4J ו-Log4J הם מבחינה לוגית שני דברים שונים.

Log4j לעומת SLF4J

כעת, כל מה שאתה צריך לבחור, באיזו מסגרת רישום אתה צריך להשתמש בזמן ריצה. לשם כך, תצטרך לכלול שני קבצי jar:

  • קובץ צנצנת כריכה SLF4J
  • קובצי jar מסגרת לרישום רצויים

לדוגמה, כדי להשתמש ב-log4j בפרויקט שלך, תצטרך לכלול קבצי jar:

  • slf4j-log4j12-1.7.12.jar
  • log4j-1.2.17.jar

לאחר שהצבת את שני קובצי ה-jar ב-classpath של היישום שלך, SLF4J יזהה אותו אוטומטית ויתחיל להשתמש ב-log4j לעיבוד הצהרות היומן בהתבסס על התצורה שסיפקת בקובץ התצורה של log4j.

לדוגמה, להלן הקוד שאתה יכול לכתוב בקובץ כיתת הפרויקט שלך:

 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info('Hello World'); } } 

למה SLF4J טוב יותר מ-Log4J?

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

להלן הסיבות, שהן טובות מספיק כדי לבחור SLF4J על Log4j:

  • תמיד עדיף להשתמש בהפשטה.
  • SLF4J היא ספריית קוד פתוח או ספרייה פנימית שהופכת אותה לבלתי תלויה בכל מימוש רישום מסוים, מה שאומר שאין צורך לנהל תצורות רישום מרובות עבור מספר ספריות.
  • SLF4J מספק רישום מבוסס מציין מיקום, אשר משפר את קריאות הקוד על ידי הסרת בדיקות כמו isInforEnabled(), isDebugEnabled() וכו'.
  • על ידי שימוש בשיטת הרישום של SLF4J, אנו דוחים את העלות של בניית הודעות רישום (מחרוזת), עד שתזדקק לה, שהוא גם יעיל במעבד וגם בזיכרון.
  • מכיוון ש- SLF4J משתמש במספר קטן יותר של מחרוזות זמניות פירושו פחות עבודה עבור אוסף האשפה, מה שאומר תפוקה וביצועים טובים יותר עבור היישום שלך.

אז בעצם, SLF4J אינו מחליף את log4j; שניהם עובדים יחד. זה מסיר את התלות ב-log4j מהאפליקציה שלך ומקל על החלפתו בעתיד בספרייה המסוגלת יותר.