1 /**
2 * Copyright (c) 2004-2011 QOS.ch
3 * All rights reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining
6 * a copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sublicense, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25 package org.slf4j.helpers;
26
27 import java.io.ObjectStreamException;
28 import java.io.Serializable;
29
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 /**
34 * Serves as base class for named logger implementation. More significantly, this
35 * class establishes deserialization behavior. See @see #readResolve.
36 *
37 * @author Ceki Gulcu
38 * @since 1.5.3
39 */
40 abstract class NamedLoggerBase implements Logger, Serializable {
41
42 private static final long serialVersionUID = 7535258609338176893L;
43
44 protected String name;
45
46 public String getName() {
47 return name;
48 }
49
50 /**
51 * Replace this instance with a homonymous (same name) logger returned
52 * by LoggerFactory. Note that this method is only called during
53 * deserialization.
54 *
55 * <p>
56 * This approach will work well if the desired ILoggerFactory is the one
57 * references by LoggerFactory. However, if the user manages its logger hierarchy
58 * through a different (non-static) mechanism, e.g. dependency injection, then
59 * this approach would be mostly counterproductive.
60 *
61 * @return logger with same name as returned by LoggerFactory
62 * @throws ObjectStreamException
63 */
64 protected Object readResolve() throws ObjectStreamException {
65 // using getName() instead of this.name works even for
66 // NOPLogger
67 return LoggerFactory.getLogger(getName());
68 }
69
70 }