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 */ 017package org.apache.logging.log4j.core.util; 018 019import org.apache.logging.log4j.util.PropertiesUtil; 020 021/** 022 * Log4j Constants. 023 */ 024public final class Constants { 025 026 /** 027 * Name of the system property to use to identify the LogEvent factory. 028 */ 029 public static final String LOG4J_LOG_EVENT_FACTORY = "Log4jLogEventFactory"; 030 031 /** 032 * Name of the system property to use to identify the ContextSelector Class. 033 */ 034 public static final String LOG4J_CONTEXT_SELECTOR = "Log4jContextSelector"; 035 036 /** 037 * Property name for the default status (internal log4j logging) level to use if not specified in configuration. 038 */ 039 public static final String LOG4J_DEFAULT_STATUS_LEVEL = "Log4jDefaultStatusLevel"; 040 041 /** 042 * JNDI context name string literal. 043 */ 044 public static final String JNDI_CONTEXT_NAME = "java:comp/env/log4j/context-name"; 045 046 /** 047 * Number of milliseconds in a second. 048 */ 049 public static final int MILLIS_IN_SECONDS = 1000; 050 051 /** 052 * Supports user request LOG4J2-898 to have the option to format a message in the background thread. 053 */ 054 public static final boolean FORMAT_MESSAGES_IN_BACKGROUND = PropertiesUtil.getProperties().getBooleanProperty( 055 "log4j.format.msg.async", false); 056 057 /** 058 * LOG4J2-3198 property which used to globally opt out of lookups in pattern layout message text, however 059 * this is the default and this property is no longer read. 060 * 061 * Deprecated in 2.15. 062 * 063 * @since 2.10 064 * @deprecated no longer used, lookups are only used when {@code %m{lookups}} is specified 065 */ 066 @Deprecated 067 public static final boolean FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS = PropertiesUtil.getProperties().getBooleanProperty( 068 "log4j2.formatMsgNoLookups", true); 069 070 /** 071 * {@code true} if we think we are running in a web container, based on the boolean value of system property 072 * "log4j2.is.webapp", or (if this system property is not set) whether the {@code javax.servlet.Servlet} class 073 * is present in the classpath. 074 */ 075 public static final boolean IS_WEB_APP = org.apache.logging.log4j.util.Constants.IS_WEB_APP; 076 077 /** 078 * Kill switch for object pooling in ThreadLocals that enables much of the LOG4J2-1270 no-GC behaviour. 079 * <p> 080 * {@code True} for non-{@link #IS_WEB_APP web apps}, disable by setting system property 081 * "log4j2.enable.threadlocals" to "false". 082 * 083 * @since 2.6 084 */ 085 public static final boolean ENABLE_THREADLOCALS = org.apache.logging.log4j.util.Constants.ENABLE_THREADLOCALS; 086 087 /** 088 * Kill switch for garbage-free Layout behaviour that encodes LogEvents directly into 089 * {@link org.apache.logging.log4j.core.layout.ByteBufferDestination}s without creating intermediate temporary 090 * Objects. 091 * <p> 092 * {@code True} by default iff all loggers are asynchronous because system property 093 * {@code Log4jContextSelector} is set to {@code org.apache.logging.log4j.core.async.AsyncLoggerContextSelector}. 094 * Disable by setting system property "log4j2.enable.direct.encoders" to "false". 095 * 096 * @since 2.6 097 */ 098 public static final boolean ENABLE_DIRECT_ENCODERS = PropertiesUtil.getProperties().getBooleanProperty( 099 "log4j2.enable.direct.encoders", true); // enable GC-free text encoding by default 100 // the alternative is to enable GC-free encoding only by default only when using all-async loggers: 101 //AsyncLoggerContextSelector.class.getName().equals(PropertiesUtil.getProperties().getStringProperty(LOG4J_CONTEXT_SELECTOR))); 102 103 /** 104 * Initial StringBuilder size used in RingBuffer LogEvents to store the contents of reusable Messages. 105 * <p> 106 * The default value is {@value}, users can override with system property "log4j.initialReusableMsgSize". 107 * </p> 108 * @since 2.6 109 */ 110 public static final int INITIAL_REUSABLE_MESSAGE_SIZE = size("log4j.initialReusableMsgSize", 128); 111 112 /** 113 * Maximum size of the StringBuilders used in RingBuffer LogEvents to store the contents of reusable Messages. 114 * After a large message has been delivered to the appenders, the StringBuilder is trimmed to this size. 115 * <p> 116 * The default value is {@value}, which allows the StringBuilder to resize three times from its initial size. 117 * Users can override with system property "log4j.maxReusableMsgSize". 118 * </p> 119 * @since 2.6 120 */ 121 public static final int MAX_REUSABLE_MESSAGE_SIZE = size("log4j.maxReusableMsgSize", (128 * 2 + 2) * 2 + 2); 122 123 /** 124 * Size of CharBuffers used by text encoders. 125 * <p> 126 * The default value is {@value}, users can override with system property "log4j.encoder.charBufferSize". 127 * </p> 128 * @since 2.6 129 */ 130 public static final int ENCODER_CHAR_BUFFER_SIZE = size("log4j.encoder.charBufferSize", 2048); 131 132 /** 133 * Default size of ByteBuffers used to encode LogEvents without allocating temporary objects. 134 * <p> 135 * The default value is {@value}, users can override with system property "log4j.encoder.byteBufferSize". 136 * </p> 137 * @see org.apache.logging.log4j.core.layout.ByteBufferDestination 138 * @since 2.6 139 */ 140 public static final int ENCODER_BYTE_BUFFER_SIZE = size("log4j.encoder.byteBufferSize", 8 * 1024); 141 142 143 private static int size(final String property, final int defaultValue) { 144 return PropertiesUtil.getProperties().getIntegerProperty(property, defaultValue); 145 } 146 147 /** 148 * Prevent class instantiation. 149 */ 150 private Constants() { 151 } 152}