On Mon, 2002-07-22 at 12:37, Remy Maucherat wrote:
> 
> Assuming people actually like the JDK 1.4 logger and think it's useful, 
> I like that solution better (there are flags, use them).

The JDK Logger is pretty cool. Although the default output is pretty
plain. I use it with my own formatter. My formatter is tweaked for
Tomcat - so it condenses some information and colorizes some
information.

This is a sample of its output,

        http://hue.jadn.com:81/~bob/xdmp.png

My formatter is attached. It assumes an Xterm window sized to 175 or so.

Cheers,
-bob



package com.jadn;

import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.Date;
import java.sql.Timestamp;

/*

 designed for a XTERM window of withd 175 (or so)


 INSTALL
     compile it
     jar it (ie. jar cf jadn.jar com/jadn/XTermFormatter.class)
     install it (cp jadn.jar $JAVA_HOME/jre/lib/ext/jadn.jar

     edit $JAVA_HOME/jre/lib/logging.properties  and comment out the SimpleFormatter
        and add this one in,

        #java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
        java.util.logging.ConsoleHandler.formatter = com.jadn.XTermFormatter

     enjoy
*/

public class XTermFormatter extends Formatter {
    /*    
	  0	Black
	  1	Red
	  2	Green
	  3	Yellow
	  4	Blue
	  5	Magenta
	  6	Cyan
	  7	White
    */

    // colors foreground/background (for xterm)
    private static final String RESET         = "\033[0m"; 
    private static final String BOLD          = "\033[1m";

    private static final String BLACK_WHITE  = "\033[30;47m";
    private static final String RED_WHITE    = "\033[31;47m";
    private static final String GREEN_WHITE  = "\033[32;47m";
    private static final String YELLOW_WHITE = "\033[33;47m";
    private static final String BLUE_WHITE   = "\033[34;47m";
    private static final String PINK_WHITE   = "\033[35;47m";
    private static final String LTGREEN_WHITE= "\033[36;47m";

    public synchronized String format(LogRecord lr){
	StringBuffer sb = new StringBuffer();


	// --  LOG: LEVEL

	Level level = lr.getLevel();
	if ( level == level.SEVERE )
	    sb.append( RED_WHITE );
	else if ( level == level.WARNING )
	    sb.append( YELLOW_WHITE );
	else if ( level == level.INFO )
	    sb.append( BOLD+GREEN_WHITE );
	else if ( level == level.CONFIG )
	    sb.append( PINK_WHITE );
	else if ( level == level.FINE )
	    sb.append( BLUE_WHITE );
	else 
	    sb.append( BLACK_WHITE );

	fill( sb, level.toString(), 5 );
	sb.append( RESET );
	sb.append( " " );


	// --  LOG: TIME STAMP 

        Timestamp ts = new Timestamp(lr.getMillis());
	// yyyy-mm-dd hh:mm:ss.fffffffff
	// 0123456789012345678
	//           1
        sb.append( ts.toString().substring(11, 19) );



	// --  LOG: LOGGER DOMAIN (or name of logger)

	sb.append( " " );
	sb.append( PINK_WHITE );
	String lgName = lr.getLoggerName();
	if ( lgName.length()>15){
	    sb.append( ">" );
	    sb.append( lgName.substring(lgName.length()-14) );
	} else {
	    fill(sb, lgName, 15);
	}
	sb.append( RESET );
	sb.append( " " );


	// --  LOG: SOURCE CLASS AND METHOD

	String cname = shorten(lr.getSourceClassName());

	int lastDot = cname.lastIndexOf('.');
	if ( lastDot == -1 ){
	    cname=BLUE_WHITE+cname+RESET;
	} else {
	    cname=cname.substring(0,lastDot)+BLUE_WHITE+cname.substring(lastDot)+RESET;
	}
	cname += "." + lr.getSourceMethodName();

	fill( sb, cname, 60 );
	sb.append( " " );



	// --  LOG: MESSAGE AND EXCEPTION

	sb.append( lr.getMessage() );
	if (lr.getThrown() != null ){
	    sb.append( " " );
	    sb.append( lr.getThrown() );
	}

        sb.append("\n");
	return sb.toString();
    }


    // try and shorten known names
    private String shorten(String cname){
	if ( cname.startsWith( "org.apache.catalina" ) )
	    cname = "o.a.c"+cname.substring("org.apache.catalina".length());
	if ( cname.startsWith( "org.apache" ) )
	    cname = "o.a"+cname.substring("org.apache".length());
	return cname;
    }


    // fill with spaces until supplied string reaches requested minLen 
    // (longer strings are passed through without being chopped)
    private void fill( StringBuffer sb, String toAdd, int minLen ){
	sb.append(toAdd);
	int fillTo = minLen - toAdd.length();
	while (fillTo-->0 )
	    sb.append(" ");
    }

}


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to