From: Dave B. <bla...@us...> - 2012-08-17 01:10:07
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/logging In directory vz-cvs-3.sog:/tmp/cvs-serv1307/src/org/sblim/cimclient/internal/logging Modified Files: Tag: Experimental LogAndTraceBroker.java Log Message: 3554738 - dump CIM xml by LogAndTraceBroker.trace() Index: LogAndTraceBroker.java =================================================================== RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/logging/LogAndTraceBroker.java,v retrieving revision 1.10.2.15 retrieving revision 1.10.2.16 diff -u -d -r1.10.2.15 -r1.10.2.16 --- LogAndTraceBroker.java 29 Feb 2012 04:24:41 -0000 1.10.2.15 +++ LogAndTraceBroker.java 17 Aug 2012 01:10:05 -0000 1.10.2.16 @@ -28,6 +28,7 @@ * 3469018 2012-01-03 blaschke-oss Properties not passed to CIMIndicationHandler * 3484014 2012-02-03 blaschke-oss Add LogAndTraceBroker.isLoggable for message/trace * 3489638 2012-02-28 blaschke-oss PERF: Bottleneck in LogAndTraceBroker.java - getCaller() + * 3554738 2012-08-16 blaschke-oss dump CIM xml by LogAndTraceBroker.trace() */ package org.sblim.cimclient.internal.logging; @@ -46,6 +47,7 @@ import java.util.logging.LogRecord; import java.util.logging.Logger; +import org.sblim.cimclient.CIMXMLTraceListener; import org.sblim.cimclient.LogAndTraceManager; import org.sblim.cimclient.LogListener; import org.sblim.cimclient.TraceListener; @@ -97,6 +99,8 @@ private volatile ArrayList<TraceListener> iTraceListeners; + private volatile ArrayList<CIMXMLTraceListener> iCIMXMLTraceListeners; + private String iProductName = "SBLIM CIM Client for Java"; private String iCopyright = "COPYRIGHT (C) 2006, 2012 IBM Corp."; @@ -138,6 +142,7 @@ private LogAndTraceBroker() { this.iLogListeners = new ArrayList<LogListener>(); this.iTraceListeners = new ArrayList<TraceListener>(); + this.iCIMXMLTraceListeners = new ArrayList<CIMXMLTraceListener>(); loadVersionTxt(); registerInternalListeners(); } @@ -523,6 +528,51 @@ } /** + * Adds a listener for CIM-XML trace messages. The listener will be notified + * of any CIM-XML trace event. + * + * @param pListener + * The listener + */ + public synchronized void addCIMXMLTraceListener(CIMXMLTraceListener pListener) { + if (pListener == null) return; + ArrayList<CIMXMLTraceListener> newListeners = new ArrayList<CIMXMLTraceListener>( + this.iCIMXMLTraceListeners); + newListeners.add(pListener); + this.iCIMXMLTraceListeners = newListeners; + } + + /** + * Removes a CIM-XML trace listener. This listener will not be notified of + * CIM-XML trace events anymore. + * + * @param pListener + * The listener + */ + public synchronized void removeCIMXMLTraceListener(CIMXMLTraceListener pListener) { + ArrayList<CIMXMLTraceListener> newListeners = new ArrayList<CIMXMLTraceListener>( + this.iCIMXMLTraceListeners); + if (!newListeners.remove(pListener)) return; + this.iCIMXMLTraceListeners = newListeners; + } + + /** + * Removes all CIM-XML trace listeners. + */ + public synchronized void clearCIMXMLTraceListeners() { + if (this.iCIMXMLTraceListeners.size() > 0) this.iCIMXMLTraceListeners = new ArrayList<CIMXMLTraceListener>(); + } + + /** + * Gets the registered CIM-XML trace listeners. + * + * @return A list of listeners + */ + public List<CIMXMLTraceListener> getCIMXMLTraceListeners() { + return this.iCIMXMLTraceListeners; + } + + /** * Forwards a log/trace message to the registered log&trace listeners. * * @param pKey @@ -623,6 +673,30 @@ } /** + * Forwards a CIM-XML trace message to the registered CIM-XML trace + * listeners. + * + * @param pMessage + * The CIM-XML message text + * @param pOutgoing + * <code>true</code> if CIM-XML is outgoing (being sent from + * client to server), <code>false</code> if CIM-XML is incoming + * (being sent from server to client) + */ + public void traceCIMXML(String pMessage, boolean pOutgoing) { + try { + if (this.iCIMXMLTraceListeners.size() > 0) { + final List<CIMXMLTraceListener> traceListeners = getCIMXMLTraceListeners(); + for (int i = 0; i < traceListeners.size(); ++i) { + traceListeners.get(i).traceCIMXML(pMessage, pOutgoing); + } + } + } catch (Exception e) { + // don't crash for logging + } + } + + /** * Forwards a method entry message to the registered trace listeners. */ public void entry() { @@ -784,4 +858,24 @@ return true; } + + /** + * Checks whether there are CIM-XML trace listeners installed that will log + * a CIM-XML trace message. Use this method to determine if a trace() method + * call could result in logging before preparing the information to be + * logged. For example: + * + * <pre> + * if (logger.isLoggableCIMXMLTrace() { + * // Prepare info for logging + * logger.traceCIMXML(... + * </pre> + * + * @return <code>true</code> if CIM-XML trace message could be logged, + * <code>false</code> otherwise. + */ + public boolean isLoggableCIMXMLTrace() { + // If there are no CIM-XML trace listeners, message will not be logged + return this.iCIMXMLTraceListeners.size() > 0; + } } |