1 7 package org.jahia.sqlprofiler.gui; 8 9 import java.util.StringTokenizer ; 10 import org.apache.log4j.Priority; 11 import org.xml.sax.Attributes ; 12 import org.xml.sax.SAXException ; 13 import org.xml.sax.helpers.DefaultHandler ; 14 15 22 class XMLFileHandler 23 extends DefaultHandler 24 { 25 26 private static final String TAG_EVENT = "log4j:event"; 27 28 private static final String TAG_MESSAGE = "log4j:message"; 29 30 private static final String TAG_NDC = "log4j:NDC"; 31 32 private static final String TAG_THROWABLE = "log4j:throwable"; 33 34 private static final String TAG_LOCATION_INFO = "log4j:locationInfo"; 35 36 37 private final LoggerTableModel mModel; 38 39 private int mNumEvents; 40 41 42 private long mTimeStamp; 43 44 private Priority mPriority; 45 46 private String mCategoryName; 47 48 private String mNDC; 49 50 private String mThreadName; 51 52 private String mMessage; 53 54 private String [] mThrowableStrRep; 55 56 private String mLocationDetails; 57 58 private final StringBuffer mBuf = new StringBuffer (); 59 60 65 XMLFileHandler(LoggerTableModel aModel) { 66 mModel = aModel; 67 } 68 69 70 public void startDocument() 71 throws SAXException 72 { 73 mNumEvents = 0; 74 } 75 76 77 public void characters(char[] aChars, int aStart, int aLength) { 78 mBuf.append(String.valueOf(aChars, aStart, aLength)); 79 } 80 81 82 public void endElement(String aNamespaceURI, 83 String aLocalName, 84 String aQName) 85 { 86 if (TAG_EVENT.equals(aQName)) { 87 addEvent(); 88 resetData(); 89 } else if (TAG_NDC.equals(aQName)) { 90 mNDC = mBuf.toString(); 91 } else if (TAG_MESSAGE.equals(aQName)) { 92 mMessage = mBuf.toString(); 93 } else if (TAG_THROWABLE.equals(aQName)) { 94 final StringTokenizer st = 95 new StringTokenizer (mBuf.toString(), "\n\t"); 96 mThrowableStrRep = new String [st.countTokens()]; 97 if (mThrowableStrRep.length > 0) { 98 mThrowableStrRep[0] = st.nextToken(); 99 for (int i = 1; i < mThrowableStrRep.length; i++) { 100 mThrowableStrRep[i] = "\t" + st.nextToken(); 101 } 102 } 103 } 104 } 105 106 107 public void startElement(String aNamespaceURI, 108 String aLocalName, 109 String aQName, 110 Attributes aAtts) 111 { 112 mBuf.setLength(0); 113 114 if (TAG_EVENT.equals(aQName)) { 115 mThreadName = aAtts.getValue("thread"); 116 mTimeStamp = Long.parseLong(aAtts.getValue("timestamp")); 117 mCategoryName = aAtts.getValue("logger"); 118 mPriority = Priority.toPriority(aAtts.getValue("level")); 119 } else if (TAG_LOCATION_INFO.equals(aQName)) { 120 mLocationDetails = aAtts.getValue("class") + "." 121 + aAtts.getValue("method") 122 + "(" + aAtts.getValue("file") + ":" + aAtts.getValue("line") 123 + ")"; 124 } 125 } 126 127 128 int getNumEvents() { 129 return mNumEvents; 130 } 131 132 136 137 private void addEvent() { 138 mModel.addEvent(new EventDetails(mTimeStamp, 139 mPriority, 140 mCategoryName, 141 mNDC, 142 mThreadName, 143 mMessage, 144 mThrowableStrRep, 145 mLocationDetails)); 146 mNumEvents++; 147 } 148 149 150 private void resetData() { 151 mTimeStamp = 0; 152 mPriority = null; 153 mCategoryName = null; 154 mNDC = null; 155 mThreadName = null; 156 mMessage = null; 157 mThrowableStrRep = null; 158 mLocationDetails = null; 159 } 160 } 161 | Popular Tags |