המרת מסלול ערימה למחרוזת ב- Java

1. הקדמה

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

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

2. המרה עם Java Core

נתחיל בספריית הליבה.

הפונקציה printStackTrace () של ה יוצא מן הכלל class יכול לקחת פרמטר אחד, או a PrintStream או א PrintWriter. לפיכך, ניתן באמצעות א StringWriter, כדי להדפיס את עקבות הערימה ל- a חוּט:

StringWriter sw = חדש StringWriter (); PrintWriter pw = חדש PrintWriter (sw); e.printStackTrace (pw); 

ואז, מתקשר sw.toString () יחזיר את עקבות הערימה כ- חוּט.

3. המרה עם Commons-Lang

בעוד שהשיטה הקודמת היא הדרך הפשוטה ביותר להמיר עקבות מחסנית ל- חוּט באמצעות Java הליבה, זה נשאר קצת מסורבל. למרבה המזל, Apache Commons-Lang מספק פונקציה שעושה את העבודה.

Apache Commons-Lang היא ספרייה שימושית מאוד המציעה הרבה תכונות שחסרות בשיעורי הליבה של ה- API של Java, כולל שיעורים שניתן להשתמש בהם כדי לעבוד עם החריגים.

ראשית, נתחיל בתצורת הפרויקט. כאשר אנו משתמשים ב- Maven, עלינו להוסיף את התלות הבאה ל- pom.xml:

 org.apache.commons commons-lang3 3.5 

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

מחרוזת stacktrace = ExceptionUtils.getStackTrace (e); 

4. מסקנה

קבלת עקבות הערימה של חריג כ- חוּט לא קשה, אבל זה רחוק מלהיות אינטואיטיבי. מאמר זה מציג שתי דרכים לעשות זאת, באמצעות Java הליבה או באמצעות Apache Commons-Lang.

זכור שג'אווה 9 תביא API StackWalking חדש שאמור להקל על הדברים.

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