001/* 002 * The contents of this file are subject to the terms of the Common Development and 003 * Distribution License (the License). You may not use this file except in compliance with the 004 * License. 005 * 006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 007 * specific language governing permission and limitations under the License. 008 * 009 * When distributing Covered Software, include this CDDL Header Notice in each file and include 010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 011 * Header, with the fields enclosed by brackets [] replaced by your own identifying 012 * information: "Portions Copyright [year] [name of copyright owner]". 013 * 014 * Copyright 2014-2016 ForgeRock AS. 015 */ 016package org.opends.server.loggers; 017 018import java.text.DateFormat; 019import java.text.SimpleDateFormat; 020import java.util.Date; 021import java.util.logging.Formatter; 022import java.util.logging.LogRecord; 023 024import org.opends.server.util.StaticUtils; 025 026/** 027 * A formatter to replace default format of java.util.logging loggers. 028 * <p> 029 * With JDK 7+, it is possible to pass in the format from the 030 * "java.util.logging.SimpleFormatter.format" parameter to the JVM. Use the 031 * parameter instead of this class when JDK6 is not supported any more. 032 */ 033public final class JDKLoggingFormater extends Formatter 034{ 035 036 /** Use one formatter per thread as DateFormat is not thread-safe. */ 037 private static final ThreadLocal<DateFormat> DATE_FORMAT = 038 new ThreadLocal<DateFormat>() 039 { 040 @Override 041 protected DateFormat initialValue() 042 { 043 return new SimpleDateFormat("[dd/MM/yyyy:HH:mm:ss Z]"); 044 } 045 }; 046 047 @Override 048 public String format(LogRecord record) 049 { 050 StringBuilder b = new StringBuilder(); 051 b.append(DATE_FORMAT.get().format(new Date(record.getMillis()))); 052 b.append(" category=").append(LoggingCategoryNames.getCategoryName(record.getLoggerName())); 053 b.append(" seq=").append(record.getSequenceNumber()); 054 b.append(" severity=").append(record.getLevel()); 055 b.append(" msg=").append(record.getMessage()); 056 if (record.getThrown() != null) 057 { 058 b.append(" exception=").append( 059 StaticUtils.stackTraceToSingleLineString(record.getThrown())); 060 } 061 b.append("\n"); 062 return b.toString(); 063 } 064 065}