⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracer.java

📁 JavaPOS的最新版本!这是源代码!零售业的请看!
💻 JAVA
字号:
package jpos.util.tracing;

///////////////////////////////////////////////////////////////////////////////
//
// This software is provided "AS IS".  The JavaPOS working group (including
// each of the Corporate members, contributors and individuals)  MAKES NO
// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
// any damages suffered as a result of using, modifying or distributing this
// software or its derivatives. Permission to use, copy, modify, and distribute
// the software and its documentation for any purpose is hereby granted. 
//
// The JavaPOS Config/Loader (aka JCL) is now under the CPL license, which 
// is an OSS Apache-like license.  The complete license is located at:
//    http://oss.software.ibm.com/developerworks/opensource/license-cpl.html
//
///////////////////////////////////////////////////////////////////////////////

import jpos.util.*;
import java.io.PrintStream;

/**
 * Tracing class to help in the debugging of other package code
 * <ol>
 * <li>
 * <b>Note 1:</b> this class is a Singleton (see GoF Design Pattern book)
 * ccess the sole instance by doing: Tracer.getInstance() call
 * </li>
 * <li>
 * <b>Note 2:</b> Will allow (in the future) the option of defining different
 * ouput for the tracer (1.3 version)
 * </li>
 * <li>
 * By default Tracer objects are turned OFF but can dynamically or via
 * properties file be turned OFF
 * </li>
 * </ol>
 * @see com.ibm.jutil.Tracer#getInstance
 * @author E. Michael Maximilien
 * @since 2.1.0
 */
public class Tracer extends Object
{
    //-------------------------------------------------------------------------
    // Ctor
    //

    /** Make ctor private to avoid construction (this is a Singleton class) */
    protected Tracer() { appendName = false; }

    /** 
     * Creates a Tracer instance with name specified
     * @param name the Tracer name
     */
    Tracer( String name ) 
    {
    	if( name == null || name.equals( "" ) ) 
    	{
    		appendName = false;
    		tracerName = "";
    		onTracerOutput = new DefaultTracerOutput();
    	}
	    else
		{
			appendName = true;
    		onTracerOutput = new DefaultTracerOutput( "[" + name + "]" );
    	 	tracerName = name; 
 		}
    }

    //-------------------------------------------------------------------------
    // Public class methods
    //

    /** @return the sole instance of this class (creating it if necessary) */
    public static Tracer getInstance()
    {
        if( instance == null )
        {
            instance = new Tracer();
            instance.init();
        }

        return instance;
    }
    
    //-------------------------------------------------------------------------
    // Public methods
    //

    /**
     * Prints a string appended with a new line to the tracer output
     * @param s the String to print
     */
    public void println( String s ) { getTracerOutput().println( s ); }

    /**
     * Prints the String representation of the Object passed
     * @param obj the Object to println
     */
    public void println( Object obj ) { getTracerOutput().println( obj.toString() ); }

    /**
     * Prints a string appended without a new line to the tracer output
     * @param s the String to print
     */
    public void print( String s ) { getTracerOutput().print( s ); }

    /**
     * Prints a String representation of the Object passed
     * @param obj the Object to print
     */
    public void print( Object obj ) { getTracerOutput().print( obj.toString() ); }

    /**
     * Prints a StackTrace from an Exception object.
     * @param e the Exception to extract StackTrace from
     */
    public void print( Exception e ) { getTracerOutput().print( e ); }
    
    /** Flushes the Tracer */
    public void flush() { getTracerOutput().flush(); }

    /**
     * Sets this tracer ON or OFF
     * @param b the boolean parameter
     */
    public void setOn( boolean b ) { tracerOn = b; }

    /** @return true if the tracer is ON (i.e. enabled) */
    public boolean isOn() { return tracerOn; }

	/** @return this Tracer's name */
	public String getName() { return tracerName; }

	/** 
	 * Tells Tracer instance whether it should append name for each trace
	 * message or not
	 * @param b the boolean parameter
	 */
	public void setAppendName( boolean b ) { appendName = b; }
    
    /** @return whether the Tracer should append its name to each println method call */
    public boolean isAppendName() { return appendName; }

    //-------------------------------------------------------------------------
    // Protected methods
    //
         
    //-------------------------------------------------------------------------
    // Private methods
    //

    /** Intialize the current instance using the DefaultProperties class */
    private void init()
    {
        JposProperties props = new DefaultProperties();
        props.loadJposProperties();

        if( !props.isPropertyDefined( JposProperties.TRACING_PROP_NAME ) )
            setOn( false );
        else
        {
            String tracingPropValue = props.getPropertyString( JposProperties.TRACING_PROP_NAME );

            if( tracingPropValue.equalsIgnoreCase( JposProperties.TRACING_ON_PROP_VALUE ) ||
                tracingPropValue.equalsIgnoreCase( JposProperties.TRACING_TRUE_PROP_VALUE ) )
                setOn( true );
        }
    }

    /** @return the tracerOutput object for the Tracer */
    private TracerOutput getTracerOutput() 
    { 
    	if( customTracerOutput != null ) return customTracerOutput;
    	
        return ( isOn() ? onTracerOutput : offTracerOutput );
    }

    //-------------------------------------------------------------------------
    // Package methods
    //
    
    /**
     * Sets the TracerOutput object -- for debugging purposes
     * @param tracerOutput the TracerOutput object
     */
    void setTracerOutput( TracerOutput tracerOutput )
    {
    	tracerOn = true;
    	customTracerOutput = tracerOutput;
    }

    //-------------------------------------------------------------------------
    // Private instance variables
    //

    private boolean tracerOn = false;
	
	private String tracerName = "";
	private boolean appendName = true;

	private TracerOutput customTracerOutput = null;
    private TracerOutput onTracerOutput = new DefaultTracerOutput();

    private TracerOutput offTracerOutput =  new TracerOutput()
                                            {
                                            	public void close() {}
                                            	public String getPrefix() { return ""; }
                                                public void print( Exception e ) {}
                                                public void println( String s ) {}
                                                public void print( String s ) {}
                                                public void flush() {}
                                            };

    //-------------------------------------------------------------------------
    // Private class variables
    //

    private static Tracer instance = null;
    
    //-------------------------------------------------------------------------
    // Private static inner classes
    //

    /**
     * Inner class for a default TracerOutput.  Just prints out info to System.err
     * @author E. Michael Maximilien
     */
    class DefaultTracerOutput extends Object implements TracerOutput
    {
        //---------------------------------------------------------------------
        // Ctor(s)
        //    	
    	
        /** 
         * Default ctor.  No prefix is used and the PrintStream is set
         * to the System.err PrintStream
         */
        public DefaultTracerOutput() 
        {
        	prefix = "";
        	appendName = false;
        }

        /** 
         * Default ctor 
         * @param s the String prefix to use for this TracerOutput
         */
        public DefaultTracerOutput( String s ) 
        {
        	if( s == null ) prefix = "";
        	else
        		if( s.equals( "" ) ) prefix = ""; 
        		else     	
        		{
		        	prefix = s;
		        	appendName = true;
        		}
        }
        
        /** 
         * Default ctor 
         * @param s the String prefix to use for this TracerOutput
         * @param pStream the PrintStream object used for this TracerOutput
         */
        public DefaultTracerOutput( String s, PrintStream pStream ) 
        {
			this( s );
			printStream = pStream;
        }

        //---------------------------------------------------------------------
        // Public methods
        //
       
	    /** 
	     * @return any prefix that is to be used with this TracerOutput
	     * <p>An existing prefix gets appended to every message</p>
	     */
	    public String getPrefix() { return prefix; }
	    
	    /**
	     * Closes the TracerOutput.  If it is a file then closes the file
	     * Any errors are not propagated up and rather printed to the System.errr
	     */
	    public void close() { getPrintStream().close(); }
        
        /**
         * Prints a string appended with a new line to the tracer output
         * @param s the String to print
         */
        public void println( String s ) 
        { 		
        	getPrintStream().println( ( appendName ? prefix : "" ) + s ); 
        }

        /**
         * Prints a string appended without a new line to the tracer output
         * @param s the String to print
         */
        public void print( String s ) 
        { 
        	getPrintStream().print( ( appendName ? prefix : "" ) + s ); 
        }

        /**
         * Prints a StackTrace from an Exception object.
         * @param e the Exception to extract StackTrace from
         */
        public void print( Exception e ) 
        { 
        	if( appendName ) System.err.println( "<" + prefix + ">" );
        	
        	e.printStackTrace( getPrintStream() ); 

        	if( appendName ) System.err.println( "</" + prefix + ">" );
        }
        
        /**
         * Flushes this TracerOutput
         * <i>
         * For this TracerOutput does not do anything since output flushes
         * automatically
         * </i>
         */
        public void flush() { getPrintStream().flush(); }

	    //-------------------------------------------------------------------------
	    // Protected methods
	    //
	    
	    /** @return the PrintStream object that is used for this TracerOutput */
	    protected PrintStream getPrintStream() { return printStream; }
	    
	    /**
	     * Sets the PrintStream for this TracerOutput
	     * @param pStream a PrintStream object
	     */
	    protected void setPrintStream( PrintStream pStream ) { printStream = pStream; }
                    
	    //-------------------------------------------------------------------------
	    // Instance variables
	    //

	    protected String prefix = "";
	    protected PrintStream printStream = System.err;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -