The version of Apache log4j used by SoundHelix.
Clone
HTTPS:
git clone https://vervis.peers.community/repos/aEp6o
SSH:
git clone USERNAME@vervis.peers.community:aEp6o
Branches
Tags
- 1.3alpha-7
- CHAINSAW_2_SANDBOX_MERGE
- CORE_VERSION
- LEVEL_REPLACES_PRIORITY
- PREALPHA_1_3_AS_OF_2004_05_12
- PRE_CHAINSAW_MODEL_CONVERSION
- PRE_UGLI_MOVE
- TAG_CHAINSAW2_MOVE
- log4j-1.2.17
- log4j-1.2.17-rc1
- v1.3alpha8
- v1.3alpha8-temp
- v1_2_1
- v1_2_10-recalled
- v1_2_11
- v1_2_11_rc1
- v1_2_11rc3
- v1_2_12
- v1_2_12_rc1
- v1_2_12_rc2
- v1_2_12_rc3
- v1_2_12_rc4
- v1_2_12_rc5
- v1_2_12_rc6
- v1_2_13
- v1_2_13_rc1
- v1_2_13_rc2
- v1_2_13_site_update
- v1_2_14
- v1_2_14_maven
- v1_2_14_rc1
- v1_2_14_site_update
- v1_2_15
- v1_2_15_rc1
- v1_2_15_rc2
- v1_2_15_rc3
- v1_2_15_rc4
- v1_2_15_rc5
- v1_2_15_rc6
- v1_2_16
- v1_2_16_rc1
- v1_2_16_rc2
- v1_2_17
- v1_2_17-rc1
- v1_2_17_rc1
- v1_2_17_rc2
- v1_2_17_rc3
- v1_2_2
- v1_2_3
- v1_2_4
- v1_2_6
- v1_2_7
- v1_2_9
- v1_2_alpha0
- v1_2_alpha7
- v1_2beta1
- v1_2final
- v1_3alpha_1
- v1_3alpha_6
- v_1_0
- v_1_0_1
- v_1_0_4
- v_1_1
- v_1_1_1
- v_1_1_2
- v_1_1_3
- v_1_1_b1
- v_1_1b2
- v_1_1b3
- v_1_1b5
- v_1_1b6
- v_1_1b7
- v_1_2beta3
XMLFileHandler.java
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software
* License version 1.1, a copy of which has been included with this
* distribution in the LICENSE.txt file. */
package org.apache.log4j.chainsaw;
import java.util.StringTokenizer;
import org.apache.log4j.Priority;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* A content handler for document containing Log4J events logged using the
* XMLLayout class. It will create events and add them to a supplied model.
*
* @author <a href="mailto:oliver@puppycrawl.com">Oliver Burn</a>
* @version 1.0
*/
class XMLFileHandler
extends DefaultHandler
{
/** represents the event tag **/
private static final String TAG_EVENT = "log4j:event";
/** represents the message tag **/
private static final String TAG_MESSAGE = "log4j:message";
/** represents the ndc tag **/
private static final String TAG_NDC = "log4j:NDC";
/** represents the throwable tag **/
private static final String TAG_THROWABLE = "log4j:throwable";
/** represents the location info tag **/
private static final String TAG_LOCATION_INFO = "log4j:locationInfo";
/** where to put the events **/
private final MyTableModel mModel;
/** the number of events in the document **/
private int mNumEvents;
/** the current element being parsed **/
private String mCurrentElement;
/** the time of the event **/
private long mTimeStamp;
/** the priority of the event **/
private Priority mPriority;
/** the category of the event **/
private String mCategoryName;
/** the NDC for the event **/
private String mNDC;
/** the thread for the event **/
private String mThreadName;
/** the msg for the event **/
private String mMessage;
/** the throwable details the event **/
private String[] mThrowableStrRep;
/** the location details for the event **/
private String mLocationDetails;
/**
* Creates a new <code>XMLFileHandler</code> instance.
*
* @param aModel where to add the events
*/
XMLFileHandler(MyTableModel aModel) {
mModel = aModel;
}
/** @see DefaultHandler **/
public void startDocument()
throws SAXException
{
mNumEvents = 0;
}
/** @see DefaultHandler **/
public void characters(char[] aChars, int aStart, int aLength) {
if (mCurrentElement == TAG_NDC) {
mNDC = new String(aChars, aStart, aLength);
} else if (mCurrentElement == TAG_MESSAGE) {
mMessage = new String(aChars, aStart, aLength);
} else if (mCurrentElement == TAG_THROWABLE) {
final StringTokenizer st =
new StringTokenizer(new String(aChars, aStart, aLength), "\t");
mThrowableStrRep = new String[st.countTokens()];
if (mThrowableStrRep.length > 0) {
mThrowableStrRep[0] = st.nextToken();
for (int i = 1; i < mThrowableStrRep.length; i++) {
mThrowableStrRep[i] = "\t" + st.nextToken();
}
}
}
}
/** @see DefaultHandler **/
public void endElement(String aNamespaceURI,
String aLocalName,
String aQName)
{
if (TAG_EVENT.equals(aQName)) {
addEvent();
resetData();
} else if (mCurrentElement != TAG_EVENT) {
mCurrentElement = TAG_EVENT; // hack - but only thing I care about
}
}
/** @see DefaultHandler **/
public void startElement(String aNamespaceURI,
String aLocalName,
String aQName,
Attributes aAtts)
{
if (TAG_EVENT.equals(aQName)) {
mThreadName = aAtts.getValue("thread");
mTimeStamp = Long.parseLong(aAtts.getValue("timestamp"));
mCategoryName = aAtts.getValue("category");
mPriority = Priority.toPriority(aAtts.getValue("level"));
} else if (TAG_LOCATION_INFO.equals(aQName)) {
mLocationDetails = aAtts.getValue("class") + "."
+ aAtts.getValue("method")
+ "(" + aAtts.getValue("file") + ":" + aAtts.getValue("line")
+ ")";
} else if (TAG_NDC.equals(aQName)) {
mCurrentElement = TAG_NDC;
} else if (TAG_MESSAGE.equals(aQName)) {
mCurrentElement = TAG_MESSAGE;
} else if (TAG_THROWABLE.equals(aQName)) {
mCurrentElement = TAG_THROWABLE;
}
}
/** @return the number of events in the document **/
int getNumEvents() {
return mNumEvents;
}
////////////////////////////////////////////////////////////////////////////
// Private methods
////////////////////////////////////////////////////////////////////////////
/** Add an event to the model **/
private void addEvent() {
mModel.addEvent(new EventDetails(mTimeStamp,
mPriority,
mCategoryName,
mNDC,
mThreadName,
mMessage,
mThrowableStrRep,
mLocationDetails));
mNumEvents++;
}
/** Reset the data for an event **/
private void resetData() {
mTimeStamp = 0;
mPriority = null;
mCategoryName = null;
mNDC = null;
mThreadName = null;
mMessage = null;
mThrowableStrRep = null;
mLocationDetails = null;
}
}