יצירת מכשיר Log4j2 מותאם אישית

1. הקדמה

במדריך זה נלמד על יצירת מתאם Log4j2 מותאם אישית. אם אתה מחפש את ההקדמה ל- Log4j2, אנא עיין במאמר זה.

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

עם זאת, יכול להיות שיש צורך במתאם מותאם אישית בהתאם לדרישות היישום.

Log4j2 היא גרסה משודרגת של Log4j ויש לה שיפורים משמעותיים לעומת Log4j. לפיכך, נשתמש במסגרת Log4j2 כדי להדגים את יצירתו של appender מותאם אישית.

2. הגדרת Maven

נצטרך את log4j-core תלות שלנו pom.xml להתחיל עם:

 org.apache.logging.log4j log4j-core 2.11.0 

הגרסה האחרונה log4j-core ניתן למצוא כאן.

3. Appender מותאם אישית

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

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

כך אנו יוצרים את MapAppender:

@Plugin (name = "MapAppender", קטגוריה = Core.CATEGORY_NAME, elementType = Appender.ELEMENT_TYPE) מחלקה ציבורית MapAppender מרחיב AbstractAppender {פרטי ConcurrentMap eventMap = ConcurrentHashMap חדש (); MapAppender מוגן (שם מחרוזת, פילטר פילטר) {super (שם, פילטר, null); } @PluginFactory סטטי ציבורי MapAppender createAppender (@PluginAttribute ("שם") שם מחרוזת, @PluginElement ("מסנן") מסנן מסנן) {להחזיר MapAppender חדש (שם, פילטר); } @Override public void append (LogEvent event) {eventMap.put (Instant.now (). ToString (), event); }}

הערנו את הכיתה עם ה- @חיבור ביאור המציין כי המוסף שלנו הוא תוסף.

ה שֵׁם של התוסף מסמל את השם שהיינו מספקים בתצורה כדי להשתמש במוסף זה. ה קטגוריה מציין את הקטגוריה בה אנו מציבים את התוסף. ה elementType הוא תוספתן.

אנו זקוקים גם לשיטת מפעל שתיצור את האפליקציה. שֶׁלָנוּ createAppender שיטה משרתת מטרה זו ומסומנת עם ה- @PluginFactory ביאור.

כאן, אנו מאתחלים את המפקח שלנו על ידי התקשרות לבנאי המוגן ואנו מעבירים את ה- מַעֲרָך בריק ככל שאיננו מתכוונים לספק פריסה כלשהי בקובץ התצורה, ואנו מצפים שהמסגרת תפתור את פריסת ברירת המחדל.

הַבָּא, ביטלנו את לְצַרֵף שיטה שיש בה את ההיגיון האמיתי של הטיפול ב- LogEvent. במקרה שלנו, לְצַרֵף שיטה מעמידה את LogEvent לתוך שלנו eventMap.

4. תצורה

עכשיו שיש לנו את שלנו MapAppender במקום, אנחנו צריכים lo4j2.xml קובץ התצורה כדי להשתמש בתוספת זו לצורך הרישום שלנו.

כך אנו מגדירים את קטע התצורה שלנו log4j2.xml קוֹבֶץ:

שים לב שתכונת החבילות צריכה להתייחס לחבילה שמכילה את התוספת המותאמת אישית שלך.

לאחר מכן, במדור התוספת שלנו, אנו מגדירים את התוספת. כך אנו מוסיפים את התוספת המותאמת אישית שלנו לרשימת התושבים בתצורה:

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

כך זה נעשה:

5. טיפול בשגיאות

כדי לטפל בשגיאות במהלך רישום האירוע נוכל להשתמש ב- שְׁגִיאָה שיטה שעברה בירושה מופשט.

לדוגמא, אם איננו רוצים לתעד אירועים שרמת היומן שלהם נמוכה מזו של לְהַזהִיר.

אנחנו יכולים להשתמש ב- שְׁגִיאָה שיטה של מופשט כדי לרשום הודעת שגיאה. כך זה נעשה בכיתה שלנו:

לצרף חלל ציבורי (אירוע LogEvent) {if (event.getLevel (). isLessSpecificThan (Level.WARN)) {error ("לא ניתן לרשום פחות מרמת WARN."); לַחֲזוֹר; } eventMap.put (Instant.now (). toString (), אירוע); }

התבונן איך שלנו לְצַרֵף השיטה השתנתה כעת. אנו בודקים את אירוע רמה להיות גדול מ לְהַזהִיר ואנחנו חוזרים מוקדם אם זה פחות מ לְהַזהִיר.

6. מסקנה

במאמר זה ראינו כיצד ליישם appender מותאם אישית עבור Log4j2.

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

כרגיל, ניתן למצוא את הדוגמה ב- Github.


$config[zx-auto] not found$config[zx-overlay] not found