מבוא ל- SLF4J

1. סקירה כללית

חזית רישום פשוטה עבור Java (בקיצור SLF4J) - משמשת חזית למסגרות רישום שונות (למשל java.util.logging, logback, Log4j). הוא מציע ממשק API כללי שהופך את הרישום לבלתי תלוי ביישום בפועל.

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

מאמר זה ידון בתלות והתצורה הדרושים לשילוב SLF4J עם Log4j2, Logback, Log4J2 ו- Jakarta Commons Logging. מידע נוסף על כל אחת מהיישומים הללו תוכלו לקרוא במאמר מבוא לרישום ג'אווה.

2.הגדרת Log4j2

כדי להשתמש ב- SLF4J עם Log4j2 עליך להוסיף את הספריות הבאות pom.xml:

 org.apache.logging.log4j log4j-api 2.7 org.apache.logging.log4j log4j-core 2.7 org.apache.logging.log4j log4j-slf4j-impl 2.7 

הגרסה האחרונה תוכל למצוא כאן: log4j-api, log4j-core, log4j-slf4j-impl.

תצורת הרישום בפועל עומדת בתצורת Log4j 2 המקורית. בוא נראה איך ה כּוֹרֵת עֵצִים נוצר מופע:

מחלקה ציבורית SLF4JExample {לוגר לוגר סטטי פרטי = LoggerFactory.getLogger (SLF4JExample.class); main public סטטי ריק (String [] args) {logger.debug ("הודעת יומן ניפוי באגים"); logger.info ("הודעת יומן מידע"); logger.error ("הודעת יומן שגיאה"); }}

שים לב שה- כּוֹרֵת עֵצִים ו LoggerFactory שייכים ל org.slf4j חֲבִילָה. דוגמה לפרויקט המופעל עם התצורה המוסברת זמינה כאן.

3.הגדרת Logback

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

 ch.qos.logback logback-classic 1.1.7 

הגרסה האחרונה תוכל למצוא כאן: logback-classic.

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

4.הגדרת Log4j

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

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

ניתן להגדיר את SLF4J כגשר, שם מופנות אליו הקריאות למסגרת קיימת. בואו נוסיף את התלות הדרושה ליצירת גשר עבור Log4j:

 org.slf4j log4j-over-slf4j 1.7.30 

עם התלות במקום (בדוק אם האחרונה ב log4j-over-slf4j), כל השיחות אל Log4j יופנו ל SLF4J. שקול את התיעוד הרשמי כדי ללמוד עוד על גישור בין מסגרות קיימות.

בדיוק כמו במסגרות האחרות Log4j יכול לשמש כמימוש בסיסי. בואו נוסיף את התלות הדרושה:

 org.slf4j slf4j-log4j12 1.7.30 log4j log4j 1.2.17 

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

5.הגדרת JCL Bridge

בסעיפים הקודמים הראינו כיצד ניתן להשתמש באותו בסיס קוד לתמיכה בכניסה באמצעות יישומים שונים. אמנם זו ההבטחה והעוצמה העיקריים של SLF4J, אך היא גם המטרה מאחורי JCL (Logging Commons Logging או Apache Commons Logging).

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

SLF4J פותר את הכריכות שלו בזמן הידור. זה נתפס פשוט אך חזק מספיק.

למרבה המזל, שתי מסגרות יכולות לעבוד יחד במצב הגשר:

 org.slf4j jcl-over-slf4j 1.7.30 

את גרסת התלות האחרונה ניתן למצוא כאן jcl-over-slf4j.

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

6. נוסף SLF4J טוב

SLF4J מספק תוספות שיכולות להפוך את הרישום ליעיל יותר ולקוד לקריא יותר. לדוגמה, SLF4J מספק ממשק שימושי מאוד לעבודה עם פרמטרים:

משתנה מחרוזת = "שלום ג'ון"; logger.debug ("ערך משתנה להדפסת: {}", משתנה);

הנה דוגמת הקוד של Log4j שעושה את אותו הדבר:

משתנה מחרוזת = "שלום ג'ון"; logger.debug ("ערך משתנה להדפסה:" + משתנה);

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

משתנה מחרוזת = "שלום ג'ון"; אם (logger.isDebugEnabled ()) {logger.debug ("הדפסת ערך משתנה:" + משתנה); }

SLF4J תקינה את רמות הרישום השונות ליישומים מסוימים. ה קָטלָנִי רמת הכניסה נרשמה (היא הוצגה ב- Log4j) בהתבסס על ההנחה שבמסגרת רישום, אנחנו לא צריכים להחליט מתי להפסיק את היישום.

רמות הרישום המשמשות הן שגיאה, אזהרה, מידע, ניפוי, עקבות. תוכלו לקרוא עוד על השימוש בהם במאמר מבוא לרישום ג'אווה.

7. מסקנה

SLF4J מסייע במעבר שקט בין מסגרות כניסה. הוא פשוט, אך עם זאת גמיש, ומאפשר קריאות ושיפור ביצועים.

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