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    }