hello all, the default java.util.logging.SimpleFormatter, used by default with the java.util.logging.ConsoleHandler, outputs one or two lines for logging messages plus the optional stack-trace if an exception is logged. the proposed formatter, always uses one line plus the optional stack-trace.
any objections on adding this class to the gnu.classpath.debug package? to try it, add the following to your logging.properties file --assuming you will be using the console handler: java.util.logging.ConsoleHandler.formatter = gnu.classpath.debug.Simple1LineFormatter cheers; rsn
Index: Simple1LineFormatter.java =================================================================== RCS file: Simple1LineFormatter.java diff -N Simple1LineFormatter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Simple1LineFormatter.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,153 @@ +/* Simple1LineFormatter.java -- A simple 1-line logging formatter + Copyright (C) 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.classpath.debug; + +import gnu.classpath.SystemProperties; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.logging.Formatter; +import java.util.logging.LogRecord; + +/** + * A simple 1-line formatter to use instead of the 2-line SimpleFormatter used + * by default in the JDK logging handlers. + * <p> + * The fixed format of this formatter is as follows: + * <p> + * <ol> + * <li>Date: As a yyyy-MM-dd string.</li> + * <li>Time: As a HH:mm:ss.SSSS Z string.</li> + * <li>Thread identifier, right-justified, and framed in an 11-digit field.</li> + * <li>Class name, without its package name, left-justified, and framed in a + * 30-character field.</li> + * <li>Method name, left-justified, and framed in a 30-character field.</li> + * <li>Level name, left-justified, and framed in a 5-character field.</li> + * <li>User message and arguments.</li> + * <li>Platform-dependent line-separator.</li> + * <li>Optionally, if the log-record contains a thrown exception, that + * exception's stack trace is appended to the output.</li> + * </ol> + * <p> + * Here is an example of the output generated by this formatter: + * <p> + * <pre> + * 2006-02-27 21:59:12.0881 +1100 -1343151280 EncodedKeyFactory engineGeneratePublic() FINER - ENTRY [EMAIL PROTECTED] + * 2006-02-27 21:59:12.0887 +1100 -1343151280 EncodedKeyFactory engineGeneratePublic() FINE - Exception in DSSPublicKey.valueOf(). Ignore + * java.security.InvalidParameterException: Unexpected OID: 1.2.840.113549.1.1.1 + * at gnu.java.security.key.dss.DSSKeyPairX509Codec.decodePublicKey (DSSKeyPairX509Codec.java:205) + * at gnu.java.security.key.dss.DSSPublicKey.valueOf (DSSPublicKey.java:136) + * at gnu.java.security.jce.sig.EncodedKeyFactory.engineGeneratePublic (EncodedKeyFactory.java:218) + * at java.security.KeyFactory.generatePublic (KeyFactory.java:219) + * at gnu.java.security.x509.X509Certificate.parse (X509Certificate.java:657) + * at gnu.java.security.x509.X509Certificate.<init> (X509Certificate.java:163) + * ... + * 2006-02-27 21:59:12.0895 +1100 -1343151280 RSAKeyPairX509Codec decodePublicKey() FINER - ENTRY [EMAIL PROTECTED] + * 2006-02-27 21:59:12.0897 +1100 -1343151280 RSAKeyPairX509Codec decodePublicKey() FINER - RETURN [EMAIL PROTECTED] + * </pre> + */ +public class Simple1LineFormatter + extends Formatter +{ + private static final String DAT_PATTERN = "yyyy-MM-dd HH:mm:ss.SSSS Z "; + private static final DateFormat DAT_FORMAT = new SimpleDateFormat(DAT_PATTERN); + private static final String THREAD_PATTERN = " #########0;-#########0"; + private static final NumberFormat THREAD_FORMAT = new DecimalFormat(THREAD_PATTERN); + private static final String SPACES_30 = " "; + private static final String SPACES_5 = " "; + private static final String LS = SystemProperties.getProperty("line.separator"); + + // default 0-arguments constructor + + public String format(LogRecord record) + { + StringBuffer sb = new StringBuffer(180) + .append(DAT_FORMAT.format(new Date(record.getMillis()))) + .append(THREAD_FORMAT.format(record.getThreadID())) + .append(" "); + String s = record.getSourceClassName(); + if (s == null) + sb.append(SPACES_30); + else + { + s = s.trim(); + int i = s.lastIndexOf("."); + if (i != - 1) + s = s.substring(i + 1); + + s = (s + SPACES_30).substring(0, 30); + } + + sb.append(s).append(" "); + s = record.getSourceMethodName(); + if (s == null) + sb.append(SPACES_30); + else + { + s = s.trim(); + if (s.endsWith("()")) + s = (s.trim() + SPACES_30).substring(0, 30); + else + s = (s.trim() + "()" + SPACES_30).substring(0, 30); + } + + sb.append(s).append(" "); + s = String.valueOf(record.getLevel()); + if (s == null) + sb.append(SPACES_5); + else + s = (s.trim() + SPACES_5).substring(0, 5); + + sb.append(s).append(" - ").append(formatMessage(record)).append(LS); + Throwable cause = record.getThrown(); + if (cause != null) + { + StringWriter sw = new StringWriter(); + cause.printStackTrace(new PrintWriter(sw, true)); + sb.append(sw.toString()); + } + + return sb.toString(); + } +}
pgpTJAV5ujM23.pgp
Description: PGP signature