    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
    18  package org.apache.log4j;
    19
    20  import org.apache.log4j.spi.ErrorHandler;
    21  import org.apache.log4j.spi.LoggingEvent;
    22
    23  import java.util.Vector;
    24
    25
    26  /**
    27   * Utility class used in testing to capture errors dispatched
    28   * by appenders.
    29   *
    30   * @author Curt Arnold
    31   */
    32  public final class VectorErrorHandler implements ErrorHandler {
    33    /**
    34     * Logger.
    35     */
    36    private Logger logger;
    37
    38    /**
    39     * Appender.
    40     */
    41    private Appender appender;
    42
    43    /**
    44     * Backup appender.
    45     */
    46    private Appender backupAppender;
    47
    48    /**
    49     * Array of processed errors.
    50     */
    51    private final Vector errors = new Vector();
    52
    53    /**
    54     * Default constructor.
    55     */
    56    public VectorErrorHandler() {
    57    }
    58
    59    /**
    60     * {@inheritDoc}
    61     */
    62    public void setLogger(final Logger logger) {
    63      this.logger = logger;
    64    }
    65
    66    /**
    67     * Gets last logger specified by setLogger.
    68     * @return logger.
    69     */
    70    public Logger getLogger() {
    71      return logger;
    72    }
    73
    74    /**
    75     * {@inheritDoc}
    76     */
    77    public void activateOptions() {
    78    }
    79
    80    /**
    81     * {@inheritDoc}
    82     */
    83    public void error(
    84      final String message, final Exception e, final int errorCode) {
    85      error(message, e, errorCode, null);
    86    }
    87
    88    /**
    89     * {@inheritDoc}
    90     */
    91    public void error(final String message) {
    92      error(message, null, -1, null);
    93    }
    94
    95    /**
    96     * {@inheritDoc}
    97     */
    98    public void error(
    99      final String message, final Exception e, final int errorCode,
    100     final LoggingEvent event) {
    101     errors.addElement(
    102       new Object[] { message, e, new Integer(errorCode), event });
    103   }
    104
    105   /**
    106    * Gets message from specified error.
    107    *
    108    * @param index index.
    109    * @return message, may be null.
    110    */
    111   public String getMessage(final int index) {
    112     return (String) ((Object[]) errors.elementAt(index))[0];
    113   }
    114
    115   /**
    116    * Gets exception from specified error.
    117    *
    118    * @param index index.
    119    * @return exception.
    120    */
    121   public Exception getException(final int index) {
    122     return (Exception) ((Object[]) errors.elementAt(index))[1];
    123   }
    124
    125   /**
    126    * Gets error code from specified error.
    127    *
    128    * @param index index.
    129    * @return error code, -1 if not specified.
    130    */
    131   public int getErrorCode(final int index) {
    132     return ((Integer) ((Object[]) errors.elementAt(index))[2]).intValue();
    133   }
    134
    135   /**
    136    * Gets logging event from specified error.
    137    *
    138    * @param index index.
    139    * @return exception.
    140    */
    141   public LoggingEvent getEvent(final int index) {
    142     return (LoggingEvent) ((Object[]) errors.elementAt(index))[3];
    143   }
    144
    145   /**
    146    * Gets number of errors captured.
    147    * @return number of errors captured.
    148    */
    149   public int size() {
    150     return errors.size();
    151   }
    152
    153   /**
    154    * {@inheritDoc}
    155    */
    156   public void setAppender(final Appender appender) {
    157     this.appender = appender;
    158   }
    159
    160   /**
    161    * Get appender.
    162    * @return appender, may be null.
    163    */
    164   public Appender getAppender() {
    165     return appender;
    166   }
    167
    168   /**
    169    * {@inheritDoc}
    170    */
    171   public void setBackupAppender(final Appender appender) {
    172     this.backupAppender = appender;
    173   }
    174
    175   /**
    176    * Get backup appender.
    177    * @return backup appender, may be null.
    178    */
    179   public Appender getBackupAppender() {
    180     return backupAppender;
    181   }
    182 }