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.log4j.lf5.util;
    18
    19  import org.apache.log4j.lf5.LogLevel;
    20  import org.apache.log4j.lf5.LogRecord;
    21
    22  import java.io.PrintWriter;
    23  import java.io.StringWriter;
    24
    25  /**
    26   * <p>A LogRecord to be used with the LogMonitorAdapter</p>
    27   *
    28   * @author Richard Hurst
    29   */
    30
    31  // Contributed by ThoughtWorks Inc.
    32
    33  public class AdapterLogRecord extends LogRecord {
    34    //--------------------------------------------------------------------------
    35    //   Constants:
    36    //--------------------------------------------------------------------------
    37
    38    //--------------------------------------------------------------------------
    39    //   Protected Variables:
    40    //--------------------------------------------------------------------------
    41
    42    //--------------------------------------------------------------------------
    43    //   Private Variables:
    44    //--------------------------------------------------------------------------
    45    private static LogLevel severeLevel = null;
    46
    47    private static StringWriter sw = new StringWriter();
    48    private static PrintWriter pw = new PrintWriter(sw);
    49
    50    //--------------------------------------------------------------------------
    51    //   Constructors:
    52    //--------------------------------------------------------------------------
    53    public AdapterLogRecord() {
    54      super();
    55    }
    56
    57    //--------------------------------------------------------------------------
    58    //   Public Methods:
    59    //--------------------------------------------------------------------------
    60    public void setCategory(String category) {
    61      super.setCategory(category);
    62      super.setLocation(getLocationInfo(category));
    63    }
    64
    65    public boolean isSevereLevel() {
    66      if (severeLevel == null) return false;
    67      return severeLevel.equals(getLevel());
    68    }
    69
    70    public static void setSevereLevel(LogLevel level) {
    71      severeLevel = level;
    72    }
    73
    74    public static LogLevel getSevereLevel() {
    75      return severeLevel;
    76    }
    77
    78    //--------------------------------------------------------------------------
    79    //   Protected Methods:
    80    //--------------------------------------------------------------------------
    81    protected String getLocationInfo(String category) {
    82      String stackTrace = stackTraceToString(new Throwable());
    83      String line = parseLine(stackTrace, category);
    84      return line;
    85    }
    86
    87    protected String stackTraceToString(Throwable t) {
    88      String s = null;
    89
    90      synchronized (sw) {
    91        t.printStackTrace(pw);
    92        s = sw.toString();
    93        sw.getBuffer().setLength(0);
    94      }
    95
    96      return s;
    97    }
    98
    99    protected String parseLine(String trace, String category) {
    100     int index = trace.indexOf(category);
    101     if (index == -1) return null;
    102     trace = trace.substring(index);
    103     trace = trace.substring(0, trace.indexOf(")") + 1);
    104     return trace;
    105   }
    106   //--------------------------------------------------------------------------
    107   //   Private Methods:
    108   //--------------------------------------------------------------------------
    109
    110   //--------------------------------------------------------------------------
    111   //   Nested Top-Level Classes or Interfaces
    112   //--------------------------------------------------------------------------
    113 }
    114