1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.log4j.customLogger;
19
20
21 import org.apache.log4j.*;
22 import org.apache.log4j.spi.OptionHandler;
23 import org.apache.log4j.spi.LoggerFactory;
24 import org.apache.log4j.xml.XLevel;
25
26 /**
27 A simple example showing Logger sub-classing. It shows the
28 minimum steps necessary to implement one's {@link LoggerFactory}.
29 Note that sub-classes follow the hierarchy even if its loggers
30 belong to different classes.
31 */
32 public class XLogger extends Logger implements OptionHandler {
33
34 // It's usually a good idea to add a dot suffix to the fully
35 // qualified class name. This makes caller localization to work
36 // properly even from classes that have almost the same fully
37 // qualified class name as XLogger, such as XLogegoryTest.
38 private static String FQCN = XLogger.class.getName() + ".";
39
40 // It's enough to instantiate a factory once and for all.
41 private static XFactory factory = new XFactory();
42
43 String suffix = "";
44
45 /**
46 Just calls the parent constuctor.
47 */
48 protected XLogger(String name) {
49 super(name);
50 }
51
52 /**
53 Nothing to activate.
54 */
55 public
56 void activateOptions() {
57 }
58
59 /**
60 Overrides the standard debug method by appending the value of
61 suffix variable to each message.
62 */
63 public
64 void debug(String message) {
65 super.log(FQCN, Level.DEBUG, message + " " + suffix, null);
66 }
67
68 /**
69 We introduce a new printing method in order to support {@link
70 XLevel#LETHAL}. */
71 public
72 void lethal(String message, Throwable t) {
73 if(repository.isDisabled(XLevel.LETHAL_INT))
74 return;
75 if(XLevel.LETHAL.isGreaterOrEqual(this.getEffectiveLevel()))
76 forcedLog(FQCN, XLevel.LETHAL, message, t);
77 }
78
79 /**
80 We introduce a new printing method in order to support {@link
81 XLevel#LETHAL}. */
82 public
83 void lethal(String message) {
84 if(repository.isDisabled(XLevel.LETHAL_INT))
85 return;
86 if(XLevel.LETHAL.isGreaterOrEqual(this.getEffectiveLevel()))
87 forcedLog(FQCN, XLevel.LETHAL, message, null);
88 }
89
90 static
91 public
92 Logger getLogger(String name) {
93 return LogManager.getLogger(name, factory);
94 }
95
96 static
97 public
98 Logger getLogger(Class clazz) {
99 return XLogger.getLogger(clazz.getName());
100 }
101
102
103 public
104 String getSuffix() {
105 return suffix;
106 }
107
108 public
109 void setSuffix(String suffix) {
110 this.suffix = suffix;
111 }
112
113 /**
114 We introduce a new printing method that takes the TRACE level.
115 */
116 public
117 void trace(String message, Throwable t) {
118 if(repository.isDisabled(XLevel.TRACE_INT))
119 return;
120 if(XLevel.TRACE.isGreaterOrEqual(this.getEffectiveLevel()))
121 forcedLog(FQCN, XLevel.TRACE, message, t);
122 }
123
124 /**
125 We introduce a new printing method that takes the TRACE level.
126 */
127 public
128 void trace(String message) {
129 if(repository.isDisabled(XLevel.TRACE_INT))
130 return;
131 if(XLevel.TRACE.isGreaterOrEqual(this.getEffectiveLevel()))
132 forcedLog(FQCN, XLevel.TRACE, message, null);
133 }
134
135
136
137 // Any sub-class of Logger must also have its own implementation of
138 // CategoryFactory.
139 public static class XFactory implements LoggerFactory {
140
141 public XFactory() {
142 }
143
144 public
145 Logger makeNewLoggerInstance(String name) {
146 return new XLogger(name);
147 }
148 }
149 }
150
151