01: /* $Id: LogUtils.java 471661 2006-11-06 08:09:25Z skitching $
02: *
03: * Licensed to the Apache Software Foundation (ASF) under one or more
04: * contributor license agreements. See the NOTICE file distributed with
05: * this work for additional information regarding copyright ownership.
06: * The ASF licenses this file to You under the Apache License, Version 2.0
07: * (the "License"); you may not use this file except in compliance with
08: * the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: */
18: package org.apache.commons.digester.plugins;
19:
20: import org.apache.commons.digester.Digester;
21: import org.apache.commons.logging.Log;
22:
23: /**
24: * Simple utility class to assist in logging.
25: * <p>
26: * This class is intended only for the use of the code in the
27: * plugins packages. No "user" code should use this package.
28: * <p>
29: * The Digester module has an interesting approach to logging:
30: * all logging should be done via the Log object stored on the
31: * digester instance that the object *doing* the logging is associated
32: * with.
33: * <p>
34: * This is done because apparently some "container"-type applications
35: * such as Avalon and Tomcat need to be able to configure different logging
36: * for different <i>instances</i> of the Digester class which have been
37: * loaded from the same ClassLoader [info from Craig McClanahan].
38: * Not only the logging of the Digester instance should be affected; all
39: * objects associated with that Digester instance should obey the
40: * reconfiguration of their owning Digester instance's logging. The current
41: * solution is to force all objects to output logging info via a single
42: * Log object stored on the Digester instance they are associated with.
43: * <p>
44: * Of course this causes problems if logging is attempted before an
45: * object <i>has</i> a valid reference to its owning Digester. The
46: * getLogging method provided here resolves this issue by returning a
47: * Log object which silently discards all logging output in this
48: * situation.
49: * <p>
50: * And it also implies that logging filtering can no longer be applied
51: * to subcomponents of the Digester, because all logging is done via
52: * a single Log object (a single Category). C'est la vie...
53: *
54: * @since 1.6
55: */
56:
57: class LogUtils {
58:
59: /**
60: * Get the Log object associated with the specified Digester instance,
61: * or a "no-op" logging object if the digester reference is null.
62: * <p>
63: * You should use this method instead of digester.getLogger() in
64: * any situation where the digester might be null.
65: */
66: static Log getLogger(Digester digester) {
67: if (digester == null) {
68: return new org.apache.commons.logging.impl.NoOpLog();
69: }
70:
71: return digester.getLogger();
72: }
73: }
|