org.openqa.selenium.grid.log.TerseFormatter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of selenium-grid Show documentation
Show all versions of selenium-grid Show documentation
Selenium automates browsers. That's it! What you do with that power is entirely up to you.
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium.grid.log;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
/** Custom java.util.logging formatter providing compact output. */
public class TerseFormatter extends Formatter {
/** The string to write at the beginning of all log headers (e.g. "[FINE core]") */
private static final String PREFIX = "";
/**
* The string to write at the end of every log header (e.g. "[FINE core]"). It should includes the
* spaces between the header and the message body.
*/
private static final String SUFFIX = " - ";
/**
* Line separator string. This is the value of the line.separator property at the moment that the
* TerseFormatter was created.
*/
private final String lineSeparator = System.getProperty("line.separator");
/*
* DGF - These have to be compile time constants to be used with switch
*/
private static final int FINE = 500; /* Derived from Level.FINE.intValue(); */
private static final int INFO = 800; /* Derived from Level.INFO.intValue(); */
private static final int WARNING = 900; /* Derived from Level.WARNING.intValue(); */
private static final int SEVERE = 1000; /* Derived from Level.SEVERE.intValue(); */
/**
* Buffer for formatting messages. We will reuse this buffer in order to reduce memory
* allocations.
*/
private final StringBuilder buffer;
private final SimpleDateFormat timestampFormatter;
public TerseFormatter(String logTimestampFormat) {
buffer = new StringBuilder();
buffer.append(PREFIX);
timestampFormatter = new SimpleDateFormat(logTimestampFormat);
}
/**
* Format the given log record and return the formatted string.
*
* @param record the log record to be formatted.
* @return a formatted log record
*/
@Override
public synchronized String format(final LogRecord record) {
buffer.setLength(PREFIX.length());
buffer.append(timestampFormatter.format(new Date(record.getMillis())));
buffer.append(' ');
buffer.append(levelNumberToCommonsLevelName(record.getLevel()));
String[] parts = record.getSourceClassName().split("\\.");
buffer.append(" [" + parts[parts.length - 1] + "." + record.getSourceMethodName() + "]");
buffer.append(SUFFIX);
buffer.append(formatMessage(record)).append(lineSeparator);
if (record.getThrown() != null) {
final StringWriter trace = new StringWriter();
record.getThrown().printStackTrace(new PrintWriter(trace));
buffer.append(trace);
}
return buffer.toString();
}
private String levelNumberToCommonsLevelName(Level level) {
switch (level.intValue()) {
case FINE:
return "DEBUG";
case INFO:
return "INFO";
case WARNING:
return "WARN";
case SEVERE:
return "ERROR";
default:
return level.getLocalizedName();
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy