1 /* Copyright (c) 2001-2014, The HSQL Development Group 2 * All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * Redistributions of source code must retain the above copyright notice, this 8 * list of conditions and the following disclaimer. 9 * 10 * Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * Neither the name of the HSQL Development Group nor the names of its 15 * contributors may be used to endorse or promote products derived from this 16 * software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, 22 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 32 package org.hsqldb.lib; 33 34 import java.io.PrintWriter; 35 import java.io.StringWriter; 36 import java.text.SimpleDateFormat; 37 import java.util.Date; 38 import java.util.logging.Formatter; 39 import java.util.logging.LogRecord; 40 41 /** 42 * An implementation of java.util.logging.Formatter very close to 43 * SimpleFormatter. 44 * 45 * The features here are optional timestamping, sortable numeric time stamp 46 * text, and no indication of invoking source code location (logger ID, 47 * class name, method name, etc.). 48 * 49 * @see Formatter 50 * @see java.util.logging.SimpleFormatter 51 * @author Blaine Simpson (blaine dot simpson at admc dot com) 52 */ 53 public class BasicTextJdkLogFormatter extends Formatter { 54 public static final String LS = System.getProperty("line.separator"); 55 protected boolean withTime = true; 56 57 protected SimpleDateFormat sdf = 58 new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 59 60 BasicTextJdkLogFormatter(boolean withTime)61 public BasicTextJdkLogFormatter(boolean withTime) { 62 this.withTime = withTime; 63 } 64 BasicTextJdkLogFormatter()65 public BasicTextJdkLogFormatter() { 66 // Intentionally empty 67 } 68 format(LogRecord record)69 public String format(LogRecord record) { 70 StringBuilder sb = new StringBuilder(); 71 if (withTime) { 72 sb.append(sdf.format(new Date(record.getMillis())) + " "); 73 } 74 sb.append(record.getLevel() + " " + formatMessage(record)); 75 if (record.getThrown() != null) { 76 StringWriter sw = new StringWriter(); 77 record.getThrown().printStackTrace(new PrintWriter(sw)); 78 sb.append(LS + sw); 79 } 80 return sb.toString() + LS; 81 // This uses platform-specific line-separator, the same as 82 // SimpleLogger does. 83 } 84 } 85