    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements. See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License. You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.logging.log4j.core.config.plugins;
    019
    020    import java.lang.annotation.Documented;
    021    import java.lang.annotation.ElementType;
    022    import java.lang.annotation.Retention;
    023    import java.lang.annotation.RetentionPolicy;
    024    import java.lang.annotation.Target;
    025
    026    import org.apache.logging.log4j.core.config.plugins.visitors.PluginBuilderAttributeVisitor;
    027    import org.apache.logging.log4j.util.Strings;
    028
    029    /**
    030     * Marks a field as a Plugin Attribute.
    031     */
    032    @Documented
    033    @Retention(RetentionPolicy.RUNTIME)
    034    @Target({ElementType.PARAMETER, ElementType.FIELD})
    035    @PluginVisitorStrategy(PluginBuilderAttributeVisitor.class)
    036    public @interface PluginBuilderAttribute {
    037
    038        /**
    039         * Specifies the attribute name this corresponds to. If no attribute is set (i.e., a blank string), then the name
    040         * of the field (or member) this annotation is attached to will be used.
    041         */
    042        String value() default Strings.EMPTY;
    043
    044        /**
    045         * Indicates that this attribute is a sensitive one that shouldn't be logged directly. Such attributes will instead
    046         * be output as a hashed value.
    047         */
    048        boolean sensitive() default false;
    049    }