/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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.apache.logging.log4j.status;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.message.Message;

import static org.apache.logging.log4j.util.Chars.*;

The Status data.
/** * The Status data. */
public class StatusData implements Serializable { private static final long serialVersionUID = -4341916115118014017L; private final long timestamp; private final StackTraceElement caller; private final Level level; private final Message msg; private String threadName; private final Throwable throwable;
Creates the StatusData object.
Params:
  • caller – The method that created the event.
  • level – The logging level.
  • msg – The message String.
  • t – The Error or Exception that occurred.
  • threadName – The thread name
/** * Creates the StatusData object. * * @param caller The method that created the event. * @param level The logging level. * @param msg The message String. * @param t The Error or Exception that occurred. * @param threadName The thread name */
public StatusData(final StackTraceElement caller, final Level level, final Message msg, final Throwable t, final String threadName) { this.timestamp = System.currentTimeMillis(); this.caller = caller; this.level = level; this.msg = msg; this.throwable = t; this.threadName = threadName; }
Returns the event's timestamp.
Returns:The event's timestamp.
/** * Returns the event's timestamp. * * @return The event's timestamp. */
public long getTimestamp() { return timestamp; }
Returns the StackTraceElement for the method that created the event.
Returns:The StackTraceElement.
/** * Returns the StackTraceElement for the method that created the event. * * @return The StackTraceElement. */
public StackTraceElement getStackTraceElement() { return caller; }
Returns the logging level for the event.
Returns:The logging level.
/** * Returns the logging level for the event. * * @return The logging level. */
public Level getLevel() { return level; }
Returns the message associated with the event.
Returns:The message associated with the event.
/** * Returns the message associated with the event. * * @return The message associated with the event. */
public Message getMessage() { return msg; } public String getThreadName() { if (threadName == null) { threadName = Thread.currentThread().getName(); } return threadName; }
Returns the Throwable associated with the event.
Returns:The Throwable associated with the event.
/** * Returns the Throwable associated with the event. * * @return The Throwable associated with the event. */
public Throwable getThrowable() { return throwable; }
Formats the StatusData for viewing.
Returns:The formatted status data as a String.
/** * Formats the StatusData for viewing. * * @return The formatted status data as a String. */
public String getFormattedStatus() { final StringBuilder sb = new StringBuilder(); final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS"); sb.append(format.format(new Date(timestamp))); sb.append(SPACE); sb.append(getThreadName()); sb.append(SPACE); sb.append(level.toString()); sb.append(SPACE); sb.append(msg.getFormattedMessage()); final Object[] params = msg.getParameters(); Throwable t; if (throwable == null && params != null && params[params.length - 1] instanceof Throwable) { t = (Throwable) params[params.length - 1]; } else { t = throwable; } if (t != null) { sb.append(SPACE); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); t.printStackTrace(new PrintStream(baos)); sb.append(baos.toString()); } return sb.toString(); } }