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 package org.apache.log4j; 018 019 import java.util.Enumeration; 020 021 import org.apache.log4j.helpers.NullEnumeration; 022 import org.apache.log4j.spi.HierarchyEventListener; 023 import org.apache.log4j.spi.LoggerFactory; 024 import org.apache.log4j.spi.LoggerRepository; 025 import org.apache.log4j.spi.RepositorySelector; 026 import org.apache.logging.log4j.core.LoggerContext; 027 import org.apache.logging.log4j.util.Strings; 028 029 /** 030 * 031 */ 032 public final class LogManager { 033 034 /** 035 * @deprecated This variable is for internal use only. It will 036 * become package protected in future versions. 037 * */ 038 @Deprecated 039 public static final String DEFAULT_CONFIGURATION_FILE = "log4j.properties"; 040 041 /** 042 * @deprecated This variable is for internal use only. It will 043 * become private in future versions. 044 * */ 045 @Deprecated 046 public static final String DEFAULT_CONFIGURATION_KEY = "log4j.configuration"; 047 048 /** 049 * @deprecated This variable is for internal use only. It will 050 * become private in future versions. 051 * */ 052 @Deprecated 053 public static final String CONFIGURATOR_CLASS_KEY = "log4j.configuratorClass"; 054 055 /** 056 * @deprecated This variable is for internal use only. It will 057 * become private in future versions. 058 */ 059 @Deprecated 060 public static final String DEFAULT_INIT_OVERRIDE_KEY = "log4j.defaultInitOverride"; 061 062 static final String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml"; 063 064 private static final LoggerRepository REPOSITORY = new Repository(); 065 066 private LogManager() { 067 } 068 069 public static Logger getRootLogger() { 070 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), Strings.EMPTY); 071 } 072 073 public static Logger getLogger(final String name) { 074 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), name); 075 } 076 077 public static Logger getLogger(@SuppressWarnings("rawtypes") final Class clazz) { 078 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), clazz.getName()); 079 } 080 081 public static Logger getLogger(final String name, final LoggerFactory factory) { 082 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), name); 083 } 084 085 public static Logger exists(final String name) { 086 final LoggerContext ctx = (LoggerContext) PrivateManager.getContext(); 087 if (!ctx.hasLogger(name)) { 088 return null; 089 } 090 return Logger.getLogger(name); 091 } 092 093 @SuppressWarnings("rawtypes") 094 public static Enumeration getCurrentLoggers() { 095 return NullEnumeration.getInstance(); 096 } 097 098 static void reconfigure() { 099 final LoggerContext ctx = (LoggerContext) PrivateManager.getContext(); 100 ctx.reconfigure(); 101 } 102 103 /** 104 * No-op implementation. 105 */ 106 public static void shutdown() { 107 } 108 109 /** 110 * No-op implementation. 111 */ 112 public static void resetConfiguration() { 113 } 114 115 /** 116 * No-op implementation. 117 * @param selector The RepositorySelector. 118 * @param guard prevents calls at the incorrect time. 119 * @throws IllegalArgumentException if a parameter is invalid. 120 */ 121 public static void setRepositorySelector(final RepositorySelector selector, final Object guard) 122 throws IllegalArgumentException { 123 } 124 125 public static LoggerRepository getLoggerRepository() { 126 return REPOSITORY; 127 } 128 129 /** 130 * The Repository. 131 */ 132 private static class Repository implements LoggerRepository { 133 @Override 134 public void addHierarchyEventListener(final HierarchyEventListener listener) { 135 136 } 137 138 @Override 139 public boolean isDisabled(final int level) { 140 return false; 141 } 142 143 @Override 144 public void setThreshold(final Level level) { 145 146 } 147 148 @Override 149 public void setThreshold(final String val) { 150 151 } 152 153 @Override 154 public void emitNoAppenderWarning(final Category cat) { 155 156 } 157 158 @Override 159 public Level getThreshold() { 160 return Level.OFF; 161 } 162 163 @Override 164 public Logger getLogger(final String name) { 165 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), name); 166 } 167 168 @Override 169 public Logger getLogger(final String name, final LoggerFactory factory) { 170 return (Logger) Category.getInstance((LoggerContext) PrivateManager.getContext(), name); 171 } 172 173 @Override 174 public Logger getRootLogger() { 175 return (Logger) Category.getRoot((LoggerContext) PrivateManager.getContext()); 176 } 177 178 @Override 179 public Logger exists(final String name) { 180 return LogManager.exists(name); 181 } 182 183 @Override 184 public void shutdown() { 185 } 186 187 @Override 188 @SuppressWarnings("rawtypes") 189 public Enumeration getCurrentLoggers() { 190 return NullEnumeration.getInstance(); 191 } 192 193 @Override 194 @SuppressWarnings("rawtypes") 195 public Enumeration getCurrentCategories() { 196 return NullEnumeration.getInstance(); 197 } 198 199 @Override 200 public void fireAddAppenderEvent(final Category logger, final Appender appender) { 201 } 202 203 @Override 204 public void resetConfiguration() { 205 } 206 } 207 208 /** 209 * Internal LogManager. 210 */ 211 private static class PrivateManager extends org.apache.logging.log4j.LogManager { 212 private static final String FQCN = LogManager.class.getName(); 213 214 215 public static org.apache.logging.log4j.spi.LoggerContext getContext() { 216 return getContext(FQCN, false); 217 } 218 219 public static org.apache.logging.log4j.Logger getLogger(final String name) { 220 return getLogger(FQCN, name); 221 } 222 } 223 }