1*2bcacabbSAdam Hornacek /* 2*2bcacabbSAdam Hornacek * CDDL HEADER START 3*2bcacabbSAdam Hornacek * 4*2bcacabbSAdam Hornacek * The contents of this file are subject to the terms of the 5*2bcacabbSAdam Hornacek * Common Development and Distribution License (the "License"). 6*2bcacabbSAdam Hornacek * You may not use this file except in compliance with the License. 7*2bcacabbSAdam Hornacek * 8*2bcacabbSAdam Hornacek * See LICENSE.txt included in this distribution for the specific 9*2bcacabbSAdam Hornacek * language governing permissions and limitations under the License. 10*2bcacabbSAdam Hornacek * 11*2bcacabbSAdam Hornacek * When distributing Covered Code, include this CDDL HEADER in each 12*2bcacabbSAdam Hornacek * file and include the License file at LICENSE.txt. 13*2bcacabbSAdam Hornacek * If applicable, add the following below this CDDL HEADER, with the 14*2bcacabbSAdam Hornacek * fields enclosed by brackets "[]" replaced with your own identifying 15*2bcacabbSAdam Hornacek * information: Portions Copyright [yyyy] [name of copyright owner] 16*2bcacabbSAdam Hornacek * 17*2bcacabbSAdam Hornacek * CDDL HEADER END 18*2bcacabbSAdam Hornacek */ 19*2bcacabbSAdam Hornacek 20*2bcacabbSAdam Hornacek /* 21*2bcacabbSAdam Hornacek * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 22*2bcacabbSAdam Hornacek */ 23*2bcacabbSAdam Hornacek 24*2bcacabbSAdam Hornacek package org.opensolaris.opengrok; 25*2bcacabbSAdam Hornacek 26*2bcacabbSAdam Hornacek import java.util.Date; 27*2bcacabbSAdam Hornacek import java.util.logging.Formatter; 28*2bcacabbSAdam Hornacek import java.util.logging.LogRecord; 29*2bcacabbSAdam Hornacek 30*2bcacabbSAdam Hornacek /** 31*2bcacabbSAdam Hornacek * Opengrok logfile formatter 32*2bcacabbSAdam Hornacek * Creates a logentry in the logfile on the following format 33*2bcacabbSAdam Hornacek * [#|YYYY-MM-DD HH:MM:ss.SSSZ |<loglevel>|<version>|OG|T=<threadnumber>| 34*2bcacabbSAdam Hornacek * <Class.method>: <logmessage> |#] 35*2bcacabbSAdam Hornacek * @author Jan S Berg 36*2bcacabbSAdam Hornacek */ 37*2bcacabbSAdam Hornacek final public class FileLogFormatter extends Formatter { 38*2bcacabbSAdam Hornacek 39*2bcacabbSAdam Hornacek private final java.text.SimpleDateFormat formatter = 40*2bcacabbSAdam Hornacek new java.text.SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss.SSSZ"); 41*2bcacabbSAdam Hornacek private static final String lineSeparator = System. 42*2bcacabbSAdam Hornacek getProperty("line.separator"); 43*2bcacabbSAdam Hornacek ts(Date date)44*2bcacabbSAdam Hornacek private String ts(Date date) { 45*2bcacabbSAdam Hornacek return formatter.format(date); 46*2bcacabbSAdam Hornacek } 47*2bcacabbSAdam Hornacek classNameOnly(String name)48*2bcacabbSAdam Hornacek private String classNameOnly(String name) { 49*2bcacabbSAdam Hornacek int index = name.lastIndexOf('.') + 1; 50*2bcacabbSAdam Hornacek return name.substring(index); 51*2bcacabbSAdam Hornacek } 52*2bcacabbSAdam Hornacek format(LogRecord record)53*2bcacabbSAdam Hornacek public String format(LogRecord record) { 54*2bcacabbSAdam Hornacek StringBuilder sb = new StringBuilder(); 55*2bcacabbSAdam Hornacek sb.append("[#|"); 56*2bcacabbSAdam Hornacek sb.append(ts(new Date(record.getMillis()))); 57*2bcacabbSAdam Hornacek sb.append(" |"); 58*2bcacabbSAdam Hornacek String loglevel = record.getLevel().getName(); 59*2bcacabbSAdam Hornacek sb.append(loglevel); 60*2bcacabbSAdam Hornacek sb.append("|"); 61*2bcacabbSAdam Hornacek sb.append("V"); 62*2bcacabbSAdam Hornacek sb.append(Info.getVersion()); 63*2bcacabbSAdam Hornacek sb.append("|OG|"); 64*2bcacabbSAdam Hornacek sb.append("T="); 65*2bcacabbSAdam Hornacek sb.append(record.getThreadID()); 66*2bcacabbSAdam Hornacek sb.append("| "); 67*2bcacabbSAdam Hornacek sb.append(classNameOnly(record.getSourceClassName())); 68*2bcacabbSAdam Hornacek sb.append('.'); 69*2bcacabbSAdam Hornacek sb.append(formatMessage(record)); 70*2bcacabbSAdam Hornacek sb.append(": "); 71*2bcacabbSAdam Hornacek sb.append(record.getMessage()); 72*2bcacabbSAdam Hornacek Throwable thrown = record.getThrown(); 73*2bcacabbSAdam Hornacek if (null != thrown) { 74*2bcacabbSAdam Hornacek sb.append(lineSeparator); 75*2bcacabbSAdam Hornacek java.io.ByteArrayOutputStream ba=new java.io.ByteArrayOutputStream(); 76*2bcacabbSAdam Hornacek thrown.printStackTrace(new java.io.PrintStream(ba, true)); 77*2bcacabbSAdam Hornacek sb.append(ba.toString()); 78*2bcacabbSAdam Hornacek } 79*2bcacabbSAdam Hornacek sb.append(" |#]"); 80*2bcacabbSAdam Hornacek sb.append(lineSeparator); 81*2bcacabbSAdam Hornacek return sb.toString(); 82*2bcacabbSAdam Hornacek } 83*2bcacabbSAdam Hornacek } 84