All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.logging.log4j.spi.LoggingSystemProperty Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to you under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.logging.log4j.spi;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.message.FlowMessageFactory;
import org.apache.logging.log4j.message.MessageFactory;
import org.apache.logging.log4j.status.StatusListener;
import org.apache.logging.log4j.util.EnvironmentPropertySource;
import org.apache.logging.log4j.util.LoaderUtil;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.PropertyKey;
import org.apache.logging.log4j.util.Unbox;

/**
 * Centralized list of property name constants that can be configured in the Log4j API. These properties may be
 * specified as system properties, environment variables (see {@link EnvironmentPropertySource}), or in a classpath
 * resource file named {@code log4j2.component.properties}.
 *
 * @since 3.0.0
 * @see PropertiesUtil
 */
public enum LoggingSystemProperty implements PropertyKey {

    /**
     * Property to override the maximum size of the StringBuilder instances used in ringbuffer log events to store
     * the contents of reusable messages. After delivering messages above this size to appenders, the StringBuilder
     * is trimmed to this maximum size. The default value is 518 which allows the StringBuilder to resize three times
     * from its initial size.
     */
    // GC.maxReusableMsgSize
    GC_REUSABLE_MESSAGE_MAX_SIZE(PropertyComponent.GC, Constant.MAX_REUSABLE_MSG_SIZE),

    /**
     * Property to ignore the thread context ClassLoader when set to {@code true}.
     *
     * @see LoaderUtil
     */
    // TODO: see if this can be removed
    LOADER_IGNORE_THREAD_CONTEXT_LOADER(PropertyComponent.LOADER, Constant.IGNORE_TCL),

    /**
     * Property to force use of the thread context ClassLoader.
     *
     * @see LoaderUtil
     */
    // TODO: see if this can be removed
    LOADER_FORCE_THREAD_CONTEXT_LOADER(PropertyComponent.LOADER, Constant.FORCE_TCL_ONLY),

    /**
     * Property to set to the fully qualified class name of a custom implementation of {@link LoggerContextFactory}.
     */
    // LoggerContext.factory
    LOGGER_CONTEXT_FACTORY_CLASS(PropertyComponent.LOGGER_CONTEXT, Constant.FACTORY),

    /**
     * Property to override the default {@link MessageFactory} class.
     */
    // Message.messageFactory
    LOGGER_MESSAGE_FACTORY_CLASS(PropertyComponent.MESSAGE, Constant.FACTORY),

    /**
     * Property to override the default {@link FlowMessageFactory} class.
     */
    // Message.flowMessageFactory
    LOGGER_FLOW_MESSAGE_FACTORY_CLASS(PropertyComponent.MESSAGE, Constant.FLOW_MESSAGE_FACTORY),

    /**
     * Property to override the default maximum nesting depth of map messages to format in JSON output. The
     * default value is 8.
     */
    // Message.jsonFormatterMaxDepth
    LOGGER_MAP_MESSAGE_JSON_FORMATTER_MAX_DEPTH(PropertyComponent.MESSAGE, Constant.JSON_FORMATTER_MAX_DEPTH),

    SIMPLE_SHOW_CONTEXT_MAP(PropertyComponent.SIMPLE_LOGGER, Constant.SHOW_CONTEXT_MAP),
    SIMPLE_SHOW_LOG_NAME(PropertyComponent.SIMPLE_LOGGER, Constant.SHOW_LOG_NAME),
    SIMPLE_SHOW_SHORT_LOG_NAME(PropertyComponent.SIMPLE_LOGGER, Constant.SHOW_SHORT_LOG_NAME),
    SIMPLE_SHOW_DATE_TIME(PropertyComponent.SIMPLE_LOGGER, Constant.SHOW_DATE_TIME),
    SIMPLE_DATE_TIME_FORMAT(PropertyComponent.SIMPLE_LOGGER, Constant.DATE_TIME_FORMAT),
    SIMPLE_LOG_FILE(PropertyComponent.SIMPLE_LOGGER, Constant.LOG_FILE),
    SIMPLE_LOG_LEVEL(PropertyComponent.SIMPLE_LOGGER, Constant.LOG_LEVEL),

    /**
     * Property that can be configured with the maximum number of status data entries to keep queued. Once the limit is
     * reached, older entries will be removed as new entries are added. The default value is 200.
     */
    // StatusLogger.entries
    STATUS_MAX_ENTRIES(PropertyComponent.STATUS_LOGGER, Constant.ENTRIES),

    /**
     * Property that can be configured with the {@link Level} name to use as the default level for
     * {@link StatusListener}s. The default value is {@link Level#WARN}.
     */
    // StatusLogger.statusLoggerLevel
    STATUS_DEFAULT_LISTENER_LEVEL(PropertyComponent.STATUS_LOGGER, Constant.LISTENER_LEVEL),

    /**
     * Property that can be configured with a date-time format string to use as the format for timestamps
     * in the status logger output. See {@link java.text.SimpleDateFormat} for supported formats.
     */
    // StatusLogger.dateFormat
    STATUS_DATE_FORMAT(PropertyComponent.STATUS_LOGGER, Constant.DATE_TIME_FORMAT),

    /**
     * Property to enable TRACE-level debug logging in the Log4j system itself.
     * 

* If the property is either defined empty or its value equals to {@code true} (ignoring case), all internal * logging will be printed to the console. The presence of this system property overrides any value set in the * configuration's {@code } status attribute. *

*/ STATUS_LOGGER_DEBUG(PropertyComponent.STATUS_LOGGER, Constant.DEBUG), /** * Property to control whether {@link ThreadContext} stores map data. If set to {@code true}, then the * thread context map will be disabled. */ // ThreadContext.enableMap THREAD_CONTEXT_MAP_ENABLED(PropertyComponent.THREAD_CONTEXT, Constant.ENABLE_MAP), /** * Property to control whether {@link ThreadContext} stores stack data. If set to {@code true}, then the * thread context stack will be disabled. */ // ThreadContext.enableStack THREAD_CONTEXT_STACK_ENABLED(PropertyComponent.THREAD_CONTEXT, Constant.ENABLE_STACK), /** * Property to control whether {@link ThreadContext} stores any data. If set to {@code true}, then the * thread context map and stack will be disabled. */ // ThreadContext.enable THREAD_CONTEXT_ENABLE(PropertyComponent.THREAD_CONTEXT, Constant.ENABLE), /** * Property to control whether {@link ThreadContextMap} uses {@link InheritableThreadLocal} when {@code true} or * {@link ThreadLocal} otherwise for holding map data. */ // ThreadContext.mapInheritable THREAD_CONTEXT_MAP_INHERITABLE(PropertyComponent.THREAD_CONTEXT, Constant.MAP_INHERITABLE), /** * Property to override the default {@link ThreadContextMap} class. Note that implementation classes should * also implement {@link ReadOnlyThreadContextMap} if they should be accessible to applications via * {@link ThreadContext#getThreadContextMap()}. */ // TODO: replace with LoggingSystem overrides THREAD_CONTEXT_MAP_CLASS(PropertyComponent.THREAD_CONTEXT, Constant.MAP_CLASS), /** * Property to override the initial capacity of the thread context map. The default value is 16. */ // ThreadContext.initialCapacity THREAD_CONTEXT_INITIAL_CAPACITY(PropertyComponent.THREAD_CONTEXT, Constant.INITIAL_CAPACITY), /** * Property to override whether to use a garbage-free implementation of {@link ThreadContextMap}. */ // ThreadContext.garbageFree THREAD_CONTEXT_GARBAGE_FREE_ENABLED(PropertyComponent.THREAD_CONTEXT, Constant.GARBAGE_FREE), /** * Property to override the default ringbuffer size used in {@link Unbox}. The default value is 32. */ // GC.unboxRingBufferSize UNBOX_RING_BUFFER_SIZE(PropertyComponent.GC, Constant.UNBOX_RING_BUFFER_SIZE), /** * Property to override webapp detection. Without this property, the presence of the {@code Servlet} interface * (from either {@code javax} or {@code jakarta}) is checked to see if this is a webapp. */ // Web.isWebApp : calculate | true | false IS_WEBAPP(PropertyComponent.WEB, Constant.IS_WEB_APP), /** * Property to override the default recycler factory. */ RECYCLER_FACTORY(PropertyComponent.RECYCLER, Constant.RECYCLER_FACTORY), /** * Property to override the default recycler capacity. */ RECYCLER_CAPACITY(PropertyComponent.RECYCLER, Constant.RECYCLER_CAPACITY); public static final String SIMPLE_LOGGER_LOG_LEVEL = "SimpleLogger.%s.level"; public static final String SYSTEM_PROPERTY_PREFIX = "log4j2.*."; private final PropertyComponent component; private final String name; private final String key; private final String systemKey; LoggingSystemProperty(final PropertyComponent component, final String name) { this.component = component; this.name = name; this.key = component.getName() + Constant.DELIM + name; this.systemKey = SYSTEM_PROPERTY_PREFIX + this.key; } public static LoggingSystemProperty findKey(final String component, final String name) { final String toFind = component + Constant.DELIM + name; for (LoggingSystemProperty property : values()) { if (property.key.equals(toFind)) { return property; } } return null; } @Override public String getComponent() { return component.getName(); } @Override public String getName() { return name; } @Override public String getKey() { return key; } @Override public String getSystemKey() { return systemKey; } @Override public String toString() { return getKey(); } public static class Constant { private static final String DELIM = "."; /** * Property to enable TRACE-level debug logging in the Log4j system itself. *

* If property {@value} is either defined empty or its value equals to {@code true} (ignoring case), all internal * logging will be printed to the console. The presence of this system property overrides any value set in the * configuration's {@code } status attribute. *

*/ static final String DEBUG = "debug"; public static String SYSTEM_DEBUG = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SYSTEM + DELIM + DEBUG; /** * Property to override webapp detection. Without this property, the presence of the {@code Servlet} interface * (from either {@code javax} or {@code jakarta}) is checked to see if this is a webapp. */ // Web.enableWebApp : calculate | true | false static final String IS_WEBAPP = "isWebApp"; public static final String WEB_IS_WEBAPP = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.WEB + DELIM + IS_WEBAPP; /** * Property to override the use of thread-local values for garbage-free logging. * * @see LOG4J2-1270 */ // ThreadContext.enabled : calculate | true | false static final String ENABLE = "enable"; /** * Property to ignore the thread context ClassLoader when set to {@code true}. * * @see LoaderUtil */ // TODO: see if this can be removed static final String IGNORE_TCL = "ignoreTCL"; public static final String LOADER_IGNORE_THREAD_CONTEXT_LOADER = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.LOADER + DELIM + IGNORE_TCL; /** * Property to force use of the thread context ClassLoader. * * @see LoaderUtil */ // TODO: see if this can be removed static final String FORCE_TCL_ONLY = "forceTCLOnly"; public static final String LOADER_FORCE_THREAD_CONTEXT_LOADER = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.LOADER + DELIM + FORCE_TCL_ONLY; /** * Property to override the default ringbuffer size used in {@link Unbox}. The default value is 32. */ // GC.unboxRingBufferSize static final String UNBOX_RING_BUFFER_SIZE = "unboxRingBufferSize"; public static final String GC_UNBOX_RING_BUFFER_SIZE = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.GC + DELIM + UNBOX_RING_BUFFER_SIZE; /** * Property to set to the fully qualified class name of a custom implementation of {@link LoggerContextFactory}. */ // LoggerContext.factory static final String FACTORY = "factory"; public static final String LOGGER_CONTEXT_FACTORY_CLASS = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.LOGGER_CONTEXT + DELIM + FACTORY; /** * Property to override the default {@link MessageFactory} class. */ // Message.messageFactory public static final String LOGGER_MESSAGE_FACTORY_CLASS = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.MESSAGE + DELIM + FACTORY; /** * Property to override the default {@link FlowMessageFactory} class. */ // Message.flowMessageFactory static final String FLOW_MESSAGE_FACTORY = "flowMessageFactory"; public static final String LOGGER_FLOW_MESSAGE_FACTORY_CLASS = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.MESSAGE + DELIM + FLOW_MESSAGE_FACTORY; /** * Property to override the default maximum nesting depth of map messages to format in JSON output. The * default value is 8. */ // Message.jsonFormatterMaxDepth static final String JSON_FORMATTER_MAX_DEPTH = "jsonFormatterMaxDepth"; public static final String LOGGER_MAP_MESSAGE_JSON_FORMATTER_MAX_DEPTH = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.MESSAGE + DELIM + JSON_FORMATTER_MAX_DEPTH; /** * Property to override the maximum size of the StringBuilder instances used in ringbuffer log events to store * the contents of reusable messages. After delivering messages above this size to appenders, the StringBuilder * is trimmed to this maximum size. The default value is 518 which allows the StringBuilder to resize three times * from its initial size. */ // GC.maxReusableMsgSize static final String MAX_REUSABLE_MSG_SIZE = "maxReusableMsgSize"; public static final String GC_REUSABLE_MESSAGE_MAX_SIZE = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.GC + DELIM + MAX_REUSABLE_MSG_SIZE; static final String SHOW_CONTEXT_MAP = "showContextMap"; public static final String SIMPLE_SHOW_CONTEXT_MAP = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + SHOW_CONTEXT_MAP; static final String SHOW_LOG_NAME = "showLogName"; public static final String SIMPLE_SHOW_LOG_NAME = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + SHOW_LOG_NAME; static final String SHOW_SHORT_LOG_NAME = "showShortLogName"; public static final String SIMPLE_SHOW_SHORT_LOG_NAME = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + SHOW_SHORT_LOG_NAME; static final String SHOW_DATE_TIME = "showDateTime"; public static final String SIMPLE_SHOW_DATE_TIME = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + SHOW_DATE_TIME; static final String DATE_TIME_FORMAT = "dateTimeFormat"; public static final String SIMPLE_DATE_TIME_FORMAT = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + DATE_TIME_FORMAT; static final String LOG_FILE = "logFile"; public static final String SIMPLE_LOG_FILE = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + LOG_FILE; static final String LOG_LEVEL = "logLevel"; public static final String SIMPLE_LOG_LEVEL = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.SIMPLE_LOGGER + DELIM + LOG_LEVEL; public static final String SIMPLE_LOGGER_LOG_LEVEL = "SimpleLogger.%s.level"; /** * Property that can be configured with the maximum number of status data entries to keep queued. Once the limit is * reached, older entries will be removed as new entries are added. The default value is 200. */ // StatusLogger.entries static final String ENTRIES = "entries"; public static final String STATUS_MAX_ENTRIES = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.STATUS_LOGGER + DELIM + ENTRIES; /** * Property that can be configured with the {@link Level} name to use as the default level for * {@link StatusListener}s. The default value is {@link Level#WARN}. */ // StatusLogger.listenerLevel static final String LISTENER_LEVEL = "listenerLevel"; public static final String STATUS_DEFAULT_LISTENER_LEVEL = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.STATUS_LOGGER + DELIM + LISTENER_LEVEL; /** * Property that can be configured with a date-time format string to use as the format for timestamps * in the status logger output. See {@link java.text.SimpleDateFormat} for supported formats. */ // StatusLogger.dateFormat public static final String STATUS_DATE_FORMAT = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.STATUS_LOGGER + DELIM + DATE_TIME_FORMAT; /** * Property to control whether {@link ThreadContext} stores map data. If set to {@code true}, then the * thread context map will be disabled. */ // ThreadContext.enableMap static final String ENABLE_MAP = "enableMap"; public static final String THREAD_CONTEXT_MAP_ENABLED = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + ENABLE_MAP; /** * Property to control whether {@link ThreadContext} stores stack data. If set to {@code true}, then the * thread context stack will be disabled. */ // ThreadContext.enableStack static final String ENABLE_STACK = "enableStack"; public static final String THREAD_CONTEXT_STACK_ENABLED = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + ENABLE_STACK; /** * Property to control whether {@link ThreadContext} stores any data. If set to {@code true}, then the * thread context map and stack will be disabled. */ // ThreadContext.enable public static final String THREAD_CONTEXT_ENABLED = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + ENABLE; /** * Property to control whether {@link ThreadContextMap} uses {@link InheritableThreadLocal} when {@code true} or * {@link ThreadLocal} otherwise for holding map data. */ // ThreadContext.mapInheritable static final String MAP_INHERITABLE = "mapInheritable"; public static final String THREAD_CONTEXT_MAP_INHERITABLE = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + MAP_INHERITABLE; /** * Property to override the default {@link ThreadContextMap} class. Note that implementation classes should * also implement {@link ReadOnlyThreadContextMap} if they should be accessible to applications via * {@link ThreadContext#getThreadContextMap()}. */ static final String MAP_CLASS = "mapClass"; public static final String THREAD_CONTEXT_MAP_CLASS = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + MAP_CLASS; /** * Property to override the initial capacity of the thread context map. The default value is 16. */ // ThreadContext.initialCapacity static final String INITIAL_CAPACITY = "initialCapcity"; public static final String THREAD_CONTEXT_INITIAL_CAPACITY = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + INITIAL_CAPACITY; /** * Property to override whether to use a garbage-free implementation of {@link ThreadContextMap}. */ // ThreadContext.garbageFree static final String GARBAGE_FREE = "garbageFree"; public static final String THREAD_CONTEXT_GARBAGE_FREE_ENABLED = SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.THREAD_CONTEXT + DELIM + GARBAGE_FREE; static final String IS_WEB_APP = "isWebApp"; public static final String WEB = LoggingSystemProperty.SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.WEB + DELIM + IS_WEB_APP; static final String RECYCLER_FACTORY = "factory"; public static final String RECYCLER_FACTORY_PROPERTY = LoggingSystemProperty.SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.RECYCLER + DELIM + RECYCLER_FACTORY; static final String RECYCLER_CAPACITY = "capacity"; public static final String RECYCLER_CAPACITY_PROPERTY = LoggingSystemProperty.SYSTEM_PROPERTY_PREFIX + PropertyComponent.Constant.RECYCLER + DELIM + RECYCLER_CAPACITY; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy