1 package net.argius.stew;
3 import java.util.logging.*;
6 * The Logger which has Apache Logging style interface.
8 * <p>The log levels map to core API's log level as below.</p><ul>
9 * <li> fatal: Level.SEVERE (and "fatal" message)
10 * <li> error: Level.SEVERE
11 * <li> warn: Level.WARNING
12 * <li> info: Level.INFO
13 * <li> debug: Level.FINE
14 * <li> trace: Level.FINER
16 * Level.CONFIG is not used.
18 public final class Logger {
20 private final java.util.logging.Logger log;
22 private String enteredMethodName;
25 this.log = java.util.logging.Logger.getLogger(name);
26 removeRootLoggerHandlers();
33 static void removeRootLoggerHandlers() {
34 java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger("");
35 for (Handler handler : rootLogger.getHandlers()) {
36 rootLogger.removeHandler(handler);
40 public static Logger getLogger(Object o) {
42 if (o instanceof Class) {
43 Class<?> c = (Class<?>)o;
45 } else if (o instanceof String) {
48 name = String.valueOf(o);
50 return new Logger(name);
54 * The INFO level maps to logging.Level.INFO .
55 * @return info level is enabled
57 public boolean isInfoEnabled() {
58 return log.isLoggable(Level.INFO);
62 * The DEBUG level maps to logging.Level.FINE .
63 * @return debug level is enabled
65 public boolean isDebugEnabled() {
66 return log.isLoggable(Level.FINE);
70 * The TRACE level maps to logging.Level.FINER .
71 * @return debug level is enabled
73 public boolean isTraceEnabled() {
74 return log.isLoggable(Level.FINER);
77 public String getEnteredMethodName() {
78 return (enteredMethodName == null) ? "" : enteredMethodName;
81 public void setEnteredMethodName(String methodName) {
82 enteredMethodName = (methodName == null) ? "" : methodName;
85 public void log(Level level, Throwable th, String format, Object... args) {
86 if (log.isLoggable(level)) {
87 final String cn = log.getName();
88 final String mn = (enteredMethodName == null) ? "(unknown method)" : enteredMethodName;
89 final String msg = (args.length == 0) ? format : String.format(format, args);
91 log.logp(level, cn, mn, msg);
93 log.logp(level, cn, mn, msg, th);
98 public void fatal(Throwable th) {
99 if (log.isLoggable(Level.SEVERE)) {
100 log(Level.SEVERE, th, "*FATAL*");
104 public void fatal(Throwable th, String format, Object... args) {
105 if (log.isLoggable(Level.SEVERE)) {
106 log(Level.SEVERE, th, "*FATAL* " + String.format(format, args));
110 public void error(Throwable th) {
111 if (log.isLoggable(Level.SEVERE)) {
112 log(Level.SEVERE, th, "");
116 public void error(Throwable th, Object o) {
117 if (log.isLoggable(Level.SEVERE)) {
118 log(Level.SEVERE, th, String.valueOf(o));
122 public void error(Throwable th, String format, Object arg) {
123 if (log.isLoggable(Level.SEVERE)) {
124 log(Level.SEVERE, th, format, arg);
128 public void warn(Throwable th) {
129 if (log.isLoggable(Level.WARNING)) {
130 log(Level.WARNING, th, "");
134 public void warn(Throwable th, Object o) {
135 if (log.isLoggable(Level.WARNING)) {
136 log(Level.WARNING, th, String.valueOf(o));
140 public void warn(String format, Object... args) {
141 if (log.isLoggable(Level.WARNING)) {
142 log(Level.WARNING, null, format, args);
146 public void info(Object o) {
147 if (isInfoEnabled()) {
148 log(Level.INFO, null, String.valueOf(o));
152 public void info(String format, Object arg) {
153 if (isInfoEnabled()) {
154 log(Level.INFO, null, format, arg);
158 public void info(String format, Object arg1, Object arg2) {
159 if (isInfoEnabled()) {
160 log(Level.INFO, null, format, arg1, arg2);
164 public void info(String format, Object... args) {
165 if (isInfoEnabled()) {
166 log(Level.INFO, null, format, args);
170 public void debug(Object o) {
171 if (isDebugEnabled()) {
172 log(Level.FINE, null, String.valueOf(o));
176 public void debug(String format, Object arg) {
177 if (isDebugEnabled()) {
178 log(Level.FINE, null, format, arg);
182 public void debug(String format, Object arg1, Object arg2) {
183 if (isDebugEnabled()) {
184 log(Level.FINE, null, format, arg1, arg2);
188 public void debug(String format, Object... args) {
189 if (isDebugEnabled()) {
190 log(Level.FINE, null, format, args);
194 public void trace(Throwable th) {
195 if (isTraceEnabled()) {
196 log(Level.FINER, th, "");
200 public void trace(Object o) {
201 if (isTraceEnabled()) {
202 log(Level.FINER, null, String.valueOf(o));
206 public void trace(String format, Object arg) {
207 if (isTraceEnabled()) {
208 log(Level.FINER, null, format, arg);
212 public void trace(String format, Object... args) {
213 if (isTraceEnabled()) {
214 log(Level.FINER, null, format, args);
218 public void atEnter(String method, Object... args) {
219 // trace("entering method [%s]", method);
220 setEnteredMethodName(method);
221 log.entering(log.getName(), method, args);
224 public void atExit(String method) {
225 // trace("exiting method [%s] with return value [%s]", method, returnValue);
226 log.exiting(log.getName(), method);
227 setEnteredMethodName("");
230 public <T> T atExit(String method, T returnValue) {
231 // trace("exiting method [%s] with return value [%s]", method, returnValue);
232 log.exiting(log.getName(), method, returnValue);
233 setEnteredMethodName("");