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.core.config.plugins;
    18
    19  import java.lang.annotation.Documented;
    20  import java.lang.annotation.ElementType;
    21  import java.lang.annotation.Retention;
    22  import java.lang.annotation.RetentionPolicy;
    23  import java.lang.annotation.Target;
    24
    25  import org.apache.logging.log4j.core.config.plugins.visitors.PluginAttributeVisitor;
    26  import org.apache.logging.log4j.util.Strings;
    27
    28  /**
    29   * Identifies a Plugin Attribute and its default value. Note that only one of the defaultFoo attributes will be
    30   * used based on the type this annotation is attached to. Thus, for primitive types, the default<i>Type</i>
    31   * attribute will be used for some <i>Type</i>. However, for more complex types (including enums), the default
    32   * string value is used instead and should correspond to the string that would correctly convert to the appropriate
    33   * enum value using {@link Enum#valueOf(Class, String) Enum.valueOf}.
    34   */
    35  @Documented
    36  @Retention(RetentionPolicy.RUNTIME)
    37  @Target({ElementType.PARAMETER, ElementType.FIELD})
    38  @PluginVisitorStrategy(PluginAttributeVisitor.class)
    39  public @interface PluginAttribute {
    40
    41      /**
    42       * Specifies the default boolean value to use.
    43       */
    44      boolean defaultBoolean() default false;
    45
    46      /**
    47       * Specifies the default byte value to use.
    48       */
    49      byte defaultByte() default 0;
    50
    51      /**
    52       * Specifies the default byte value to use.
    53       */
    54      char defaultChar() default 0;
    55
    56      /**
    57       * Specifies the default {@link Class} value to use.
    58       */
    59      Class<?> defaultClass() default Object.class;
    60
    61      /**
    62       * Specifies the default double floating point value to use.
    63       */
    64      double defaultDouble() default 0.0d;
    65
    66      /**
    67       * Specifies the default floating point value to use.
    68       */
    69      float defaultFloat() default 0.0f;
    70
    71      /**
    72       * Specifies the default integer value to use.
    73       */
    74      int defaultInt() default 0;
    75
    76      /**
    77       * Specifies the default long value to use.
    78       */
    79      long defaultLong() default 0L;
    80
    81      /**
    82       * Specifies the default long value to use.
    83       */
    84      short defaultShort() default 0;
    85
    86      /**
    87       * Specifies the default value this attribute should use if none is provided or if the provided value is invalid.
    88       */
    89      String defaultString() default Strings.EMPTY;
    90
    91      // TODO: could we allow a blank value and infer the attribute name through reflection?
    92      /**
    93       * Specifies the name of the attribute (case-insensitive) this annotation corresponds to.
    94       */
    95      String value();
    96
    97      /**
    98       * Indicates that this attribute is a sensitive one that shouldn't be logged directly. Such attributes will instead
    99       * be output as a hashed value.
    100      */
    101     boolean sensitive() default false;
    102
    103 }