View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 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  
19  package org.eclipse.jetty.util.log;
20  
21  import java.lang.reflect.Method;
22  
23  /**
24   *
25   */
26  public 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 }