blob: f6fc052824ff07746109eb721962d70116cf0568 [file] [log] [blame]
Jake Slack03928ae2014-05-13 18:41:56 -07001//
2// ========================================================================
3// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4// ------------------------------------------------------------------------
5// All rights reserved. This program and the accompanying materials
6// are made available under the terms of the Eclipse Public License v1.0
7// and Apache License v2.0 which accompanies this distribution.
8//
9// The Eclipse Public License is available at
10// http://www.eclipse.org/legal/epl-v10.html
11//
12// The Apache License v2.0 is available at
13// http://www.opensource.org/licenses/apache2.0.php
14//
15// You may elect to redistribute this code under either of these licenses.
16// ========================================================================
17//
18
19package org.eclipse.jetty.util.log;
20
21import java.lang.reflect.Method;
22
23/**
24 *
25 */
26public class LoggerLog extends AbstractLogger
27{
28 private final Object _logger;
29 private final Method _debugMT;
30 private final Method _debugMAA;
31 private final Method _infoMT;
32 private final Method _infoMAA;
33 private final Method _warnMT;
34 private final Method _warnMAA;
35 private final Method _setDebugEnabledE;
36 private final Method _getLoggerN;
37 private final Method _getName;
38 private volatile boolean _debug;
39
40 public LoggerLog(Object logger)
41 {
42 try
43 {
44 _logger = logger;
45 Class<?> lc = logger.getClass();
46 _debugMT = lc.getMethod("debug", new Class[]{String.class, Throwable.class});
47 _debugMAA = lc.getMethod("debug", new Class[]{String.class, Object[].class});
48 _infoMT = lc.getMethod("info", new Class[]{String.class, Throwable.class});
49 _infoMAA = lc.getMethod("info", new Class[]{String.class, Object[].class});
50 _warnMT = lc.getMethod("warn", new Class[]{String.class, Throwable.class});
51 _warnMAA = lc.getMethod("warn", new Class[]{String.class, Object[].class});
52 Method _isDebugEnabled = lc.getMethod("isDebugEnabled");
53 _setDebugEnabledE = lc.getMethod("setDebugEnabled", new Class[]{Boolean.TYPE});
54 _getLoggerN = lc.getMethod("getLogger", new Class[]{String.class});
55 _getName = lc.getMethod("getName");
56
57 _debug = (Boolean)_isDebugEnabled.invoke(_logger);
58 }
59 catch(Exception x)
60 {
61 throw new IllegalStateException(x);
62 }
63 }
64
65 public String getName()
66 {
67 try
68 {
69 return (String)_getName.invoke(_logger);
70 }
71 catch (Exception e)
72 {
73 e.printStackTrace();
74 return null;
75 }
76 }
77
78 public void warn(String msg, Object... args)
79 {
80 try
81 {
82 _warnMAA.invoke(_logger, args);
83 }
84 catch (Exception e)
85 {
86 e.printStackTrace();
87 }
88 }
89
90 public void warn(Throwable thrown)
91 {
92 warn("", thrown);
93 }
94
95 public void warn(String msg, Throwable thrown)
96 {
97 try
98 {
99 _warnMT.invoke(_logger, msg, thrown);
100 }
101 catch (Exception e)
102 {
103 e.printStackTrace();
104 }
105 }
106
107 public void info(String msg, Object... args)
108 {
109 try
110 {
111 _infoMAA.invoke(_logger, args);
112 }
113 catch (Exception e)
114 {
115 e.printStackTrace();
116 }
117 }
118
119 public void info(Throwable thrown)
120 {
121 info("", thrown);
122 }
123
124 public void info(String msg, Throwable thrown)
125 {
126 try
127 {
128 _infoMT.invoke(_logger, msg, thrown);
129 }
130 catch (Exception e)
131 {
132 e.printStackTrace();
133 }
134 }
135
136 public boolean isDebugEnabled()
137 {
138 return _debug;
139 }
140
141 public void setDebugEnabled(boolean enabled)
142 {
143 try
144 {
145 _setDebugEnabledE.invoke(_logger, enabled);
146 _debug = enabled;
147 }
148 catch (Exception e)
149 {
150 e.printStackTrace();
151 }
152 }
153
154 public void debug(String msg, Object... args)
155 {
156 if (!_debug)
157 return;
158
159 try
160 {
161 _debugMAA.invoke(_logger, args);
162 }
163 catch (Exception e)
164 {
165 e.printStackTrace();
166 }
167 }
168
169 public void debug(Throwable thrown)
170 {
171 debug("", thrown);
172 }
173
174 public void debug(String msg, Throwable th)
175 {
176 if (!_debug)
177 return;
178
179 try
180 {
181 _debugMT.invoke(_logger, msg, th);
182 }
183 catch (Exception e)
184 {
185 e.printStackTrace();
186 }
187 }
188
189 public void ignore(Throwable ignored)
190 {
191 if (Log.isIgnored())
192 {
193 warn(Log.IGNORED, ignored);
194 }
195 }
196
197 /**
198 * Create a Child Logger of this Logger.
199 */
200 protected Logger newLogger(String fullname)
201 {
202 try
203 {
204 Object logger=_getLoggerN.invoke(_logger, fullname);
205 return new LoggerLog(logger);
206 }
207 catch (Exception e)
208 {
209 e.printStackTrace();
210 return this;
211 }
212 }
213}