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 }