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.log4j;
018
019import java.util.Enumeration;
020
021import org.apache.log4j.helpers.NullEnumeration;
022import org.apache.log4j.spi.HierarchyEventListener;
023import org.apache.log4j.spi.LoggerFactory;
024import org.apache.log4j.spi.LoggerRepository;
025import org.apache.log4j.spi.RepositorySelector;
026import org.apache.logging.log4j.core.LoggerContext;
027import org.apache.logging.log4j.util.Strings;
028
029/**
030 *
031 */
032public 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 Category.getInstance(PrivateManager.getContext(), Strings.EMPTY);
071    }
072
073    public static Logger getLogger(final String name) {
074        return Category.getInstance(PrivateManager.getContext(), name);
075    }
076
077    public static Logger getLogger(@SuppressWarnings("rawtypes") final Class clazz) {
078        return Category.getInstance(PrivateManager.getContext(), clazz.getName());
079    }
080
081    public static Logger getLogger(final String name, final LoggerFactory factory) {
082        return Category.getInstance(PrivateManager.getContext(), name);
083    }
084
085    public static Logger exists(final String name) {
086        final LoggerContext ctx = 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 = 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 Category.getInstance(PrivateManager.getContext(), name);
166        }
167
168        @Override
169        public Logger getLogger(final String name, final LoggerFactory factory) {
170            return Category.getInstance(PrivateManager.getContext(), name);
171        }
172
173        @Override
174        public Logger getRootLogger() {
175            return Category.getRoot(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        public static LoggerContext getContext() {
215            return (LoggerContext) getContext(FQCN, false);
216        }
217
218        public static org.apache.logging.log4j.Logger getLogger(final String name) {
219            return getLogger(FQCN, name);
220        }
221    }
222}