|
What this is
Other links
The source code/* ** Copyright (c) 1997 by Timothy Gerard Endres ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ package com.ice.util; import java.io.*; import java.lang.*; import java.text.*; import java.util.*; /** * The ICETracer class implements the a stack tracing mechanism * for debugging use. This is a <strong>strictly class * based interface. There are no instance methods. * * @version $Revision: 1.4 $ * @author Timothy Gerard Endres, * <a href="mailto:time@ice.com">time@ice.com. * * @see com.ice.util.UserProperties * */ public class ICETracer extends Object { static public final String RCS_ID = "$Id: ICETracer.java,v 1.4 1998/04/29 16:30:13 time Exp $"; static public final String RCS_REV = "$Revision: 1.4 $"; static private PrintWriter out = null; static private boolean state = false; static private boolean ifOverOn = true; static private int traceState = 0; static private boolean outIsSystem = false; static private boolean echoAccum = false; static private StringBuffer outBuffer = null; static public void setTraceState( boolean state ) { ICETracer.state = state; } static public void setEchoAccumulation( boolean state ) { ICETracer.echoAccum = state; } static public void accumulateInBuffer( StringBuffer buffer ) { ICETracer.outBuffer = buffer; } static public void turnOffAccumulation() { ICETracer.outBuffer = null; } static public StringBuffer getAccumulationBuffer() { return ICETracer.outBuffer; } static public void println( String line ) { if ( line == null ) return; if ( ICETracer.outBuffer != null ) { ICETracer.outBuffer.append( line ); ICETracer.outBuffer.append( "\n" ); if ( ! ICETracer.echoAccum ) return; } if ( out != null ) { ICETracer.out.println( line ); } else { System.err.println( line ); } } static public void trace( String line ) { if ( line == null ) return; if ( ICETracer.state ) { ICETracer.println( line ); } } static public void traceIf( boolean flag, String line ) { if ( (! flag) || (line == null) ) return; if ( ICETracer.ifOverOn ) { ICETracer.println( line ); } } static public void traceWithStack( String line ) { if ( line == null ) return; Throwable thrower = new Throwable( line ); if ( ICETracer.state ) { ICETracer.println( line ); } if ( ICETracer.out == null ) thrower.printStackTrace( System.err ); else thrower.printStackTrace( ICETracer.out ); } static public String getStackLines( Throwable thrower ) { StringWriter sWrtr = new StringWriter(); PrintWriter pWrtr = new PrintWriter( sWrtr ); thrower.printStackTrace( pWrtr ); return sWrtr.toString(); } static public String getStackLines( Throwable thrower, int maxLines ) { if ( maxLines == 0 ) return ICETracer.getStackLines( thrower ); StringWriter sWrtr = new StringWriter(); PrintWriter pWrtr = new PrintWriter( sWrtr ); thrower.printStackTrace( pWrtr ); String trcStr = sWrtr.getBuffer().toString(); String sep = System.getProperty( "line.separator", "\n" ); int offset = 0; int index = trcStr.length(); for ( int ln = 0 ; ln < maxLines ; ++ln ) { int idx = trcStr.indexOf( sep, offset ); if ( idx == -1 ) break; index = idx; offset = idx + 1; } return trcStr.substring( 0, index ); } static public void traceWithStack( int maxPrintLines, String line ) { if ( line == null || maxPrintLines < 1 ) return; Throwable thrower = new Throwable( line ); if ( ICETracer.state ) { ICETracer.println( line ); } String outStr = ICETracer.getStackLines( thrower, maxPrintLines ); if ( ICETracer.out == null ) System.err.println( outStr ); else ICETracer.out.println( outStr ); } static public void traceWithStack( Throwable thrower, String line ) { if ( thrower == null && line == null ) return; if ( line != null ) ICETracer.println( line ); String outStr = ICETracer.getStackLines( thrower, 0 ); if ( ICETracer.out == null ) System.err.println( outStr ); else ICETracer.out.println( outStr ); } static public void traceWithStack( Throwable thrower, int lines, String line ) { if ( thrower == null && line == null ) return; if ( line != null ) ICETracer.println( line ); String outStr = ICETracer.getStackLines( thrower, lines ); if ( ICETracer.out == null ) System.err.println( outStr ); else ICETracer.out.println( outStr ); } static private void checkClose() { if ( ICETracer.out != null ) { if ( ! ICETracer.outIsSystem ) { ICETracer.out.close(); ICETracer.out = null; ICETracer.outIsSystem = false; } } } /** * Sets the tracer's output writer to the BufferedWriter * passed in. The new writer <em>newOut must never * be System.err or System.err, since the writer will be * closed at some point. * * @param newOut The new buffered writer to send trace output to. */ static public void setWriter( PrintWriter newOut ) { ICETracer.checkClose(); ICETracer.out = newOut; ICETracer.outIsSystem = false; ICETracer.outBuffer = null; } static public void setWriterToStdout() { PrintWriter newOut = new PrintWriter( new OutputStreamWriter( System.out ) ); if ( newOut != null ) { ICETracer.checkClose(); ICETracer.out = newOut; ICETracer.outIsSystem = true; ICETracer.outBuffer = null; } } static public void setWriterToStderr() { PrintWriter newOut = new PrintWriter( new OutputStreamWriter( System.err ) ); if ( newOut != null ) { ICETracer.checkClose(); ICETracer.out = newOut; ICETracer.outIsSystem = true; ICETracer.outBuffer = null; } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.