View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache license, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License. You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the license for the specific language governing permissions and
    15   * limitations under the license.
    16   */
    17  package org.apache.logging.log4j.status;
    18
    19  import java.io.ByteArrayOutputStream;
    20  import java.io.PrintStream;
    21  import java.io.Serializable;
    22  import java.text.SimpleDateFormat;
    23  import java.util.Date;
    24
    25  import org.apache.logging.log4j.Level;
    26  import org.apache.logging.log4j.message.Message;
    27
    28  /**
    29   * The Status data.
    30   */
    31  public class StatusData implements Serializable {
    32      private static final long serialVersionUID = -4341916115118014017L;
    33
    34      private final long timestamp;
    35      private final StackTraceElement caller;
    36      private final Level level;
    37      private final Message msg;
    38      private final Throwable throwable;
    39
    40      /**
    41       * Creates the StatusData object.
    42       * @param caller The method that created the event.
    43       * @param level The logging level.
    44       * @param msg The message String.
    45       * @param t The Error or Exception that occurred.
    46       */
    47      public StatusData(final StackTraceElement caller, final Level level, final Message msg, final Throwable t) {
    48          this.timestamp = System.currentTimeMillis();
    49          this.caller = caller;
    50          this.level = level;
    51          this.msg = msg;
    52          this.throwable = t;
    53      }
    54
    55      /**
    56       * Returns the event's timestamp.
    57       * @return The event's timestamp.
    58       */
    59      public long getTimestamp() {
    60          return timestamp;
    61      }
    62
    63      /**
    64       * Returns the StackTraceElement for the method that created the event.
    65       * @return The StackTraceElement.
    66       */
    67      public StackTraceElement getStackTraceElement() {
    68          return caller;
    69      }
    70
    71      /**
    72       * Returns the logging level for the event.
    73       * @return The logging level.
    74       */
    75      public Level getLevel() {
    76          return level;
    77      }
    78
    79      /**
    80       * Returns the message associated with the event.
    81       * @return The message associated with the event.
    82       */
    83      public Message getMessage() {
    84          return msg;
    85      }
    86
    87      /**
    88       * Returns the Throwable associated with the event.
    89       * @return The Throwable associated with the event.
    90       */
    91      public Throwable getThrowable() {
    92          return throwable;
    93      }
    94
    95      /**
    96       * Formats the StatusData for viewing.
    97       * @return The formatted status data as a String.
    98       */
    99      public String getFormattedStatus() {
    100         final StringBuilder sb = new StringBuilder();
    101         final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
    102         sb.append(format.format(new Date(timestamp)));
    103         sb.append(' ');
    104         sb.append(level.toString());
    105         sb.append(' ');
    106         sb.append(msg.getFormattedMessage());
    107         final Object[] params = msg.getParameters();
    108         Throwable t;
    109         if (throwable == null && params != null && params[params.length - 1] instanceof Throwable) {
    110             t = (Throwable) params[params.length - 1];
    111         } else {
    112             t = throwable;
    113         }
    114         if (t != null) {
    115             sb.append(' ');
    116             final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    117             t.printStackTrace(new PrintStream(baos));
    118             sb.append(baos.toString());
    119         }
    120         return sb.toString();
    121     }
    122 }