org.eclipse.persistence.logging.LogFormatter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.logging;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;
import org.eclipse.persistence.internal.helper.Helper;
/**
*
* Print a brief summary of a TopLink LogRecord in a human readable
* format. The summary will typically be 1 or 2 lines.
*
*/
public class LogFormatter extends SimpleFormatter {
Date dat = new Date();
private final static String format = "{0,date} {0,time}";
private MessageFormat formatter;
private Object[] args = new Object[1];
// Line separator string. This is the value of the line.separator
// property at the moment that the SimpleFormatter was created.
private final String lineSeparator = Helper.cr();
/**
* Format the given LogRecord.
* @param record0 the log record to be formatted.
* @return a formatted log record
*/
public synchronized String format(LogRecord record0) {
if (!(record0 instanceof EclipseLinkLogRecord)) {
return super.format(record0);
} else {
EclipseLinkLogRecord record = (EclipseLinkLogRecord)record0;
StringBuffer sb = new StringBuffer();
if (record.shouldPrintDate()) {
// Minimize memory allocations here.
dat.setTime(record.getMillis());
args[0] = dat;
StringBuffer text = new StringBuffer();
if (formatter == null) {
formatter = new MessageFormat(format);
}
formatter.format(args, text, null);
sb.append(text);
sb.append(" ");
}
if (record.getSourceClassName() != null) {
sb.append(record.getSourceClassName());
} else {
sb.append(record.getLoggerName());
}
if (record.getSourceMethodName() != null) {
sb.append(" ");
sb.append(record.getSourceMethodName());
}
if (record.getSessionString() != null) {
sb.append(" ");
sb.append(record.getSessionString());
}
if (record.getConnection() != null) {
sb.append(" ");
sb.append(AbstractSessionLog.CONNECTION_STRING + "(" + String.valueOf(System.identityHashCode(record.getConnection())) + ")");
}
if (record.shouldPrintThread()) {
sb.append(" ");
sb.append(AbstractSessionLog.THREAD_STRING + "(" + String.valueOf(record.getThreadID()) + ")");
}
sb.append(lineSeparator);
String message = formatMessage(record);
sb.append(record.getLevel().getLocalizedName());
sb.append(": ");
sb.append(message);
sb.append(lineSeparator);
if (record.getThrown() != null) {
StringWriter sw = new StringWriter();
try (PrintWriter pw = new PrintWriter(sw)) {
if (record.getLevel().intValue() == Level.SEVERE.intValue()) {
record.getThrown().printStackTrace(pw);
} else if (record.getLevel().intValue() <= Level.WARNING.intValue()) {
if (record.shouldLogExceptionStackTrace()) {
record.getThrown().printStackTrace(pw);
} else {
pw.write(record.getThrown().toString());
pw.write(lineSeparator);
}
}
pw.close();
sb.append(sw.toString());
}
}
return sb.toString();
}
}
}