View Javadoc
1   package org.apache.commons.jcs3.log;
2   
3   import java.util.function.Supplier;
4   import java.util.logging.Level;
5   import java.util.logging.Logger;
6   
7   /*
8    * Licensed to the Apache Software Foundation (ASF) under one or more
9    * contributor license agreements. See the NOTICE file distributed with
10   * this work for additional information regarding copyright ownership.
11   * The ASF licenses this file to You under the Apache license, Version 2.0
12   * (the "License"); you may not use this file except in compliance with
13   * the License. You may obtain a copy of the License at
14   *
15   *      http://www.apache.org/licenses/LICENSE-2.0
16   *
17   * Unless required by applicable law or agreed to in writing, software
18   * distributed under the License is distributed on an "AS IS" BASIS,
19   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20   * See the license for the specific language governing permissions and
21   * limitations under the license.
22   */
23  
24  /**
25   * This is a wrapper around the <code>java.util.logging.Logger</code> implementing our own
26   * <code>Log</code> interface.
27   * <p>
28   * This is the mapping of the log levels
29   * </p>
30   * <pre>
31   * Java Level   Log Level
32   * SEVERE       FATAL
33   * SEVERE       ERROR
34   * WARNING      WARN
35   * INFO         INFO
36   * FINE         DEBUG
37   * FINER        TRACE
38   * </pre>
39   */
40  public class JulLogAdapter implements Log
41  {
42      private final Logger logger;
43  
44      /**
45       * Construct a JUL Logger wrapper
46       *
47       * @param logger the JUL Logger
48       */
49      public JulLogAdapter(final Logger logger)
50      {
51          this.logger = logger;
52      }
53  
54      private void log(final Level level, final String message)
55      {
56          if (logger.isLoggable(level))
57          {
58              logger.logp(level, logger.getName(), "", message);
59          }
60      }
61  
62      private void log(final Level level, final Object message)
63      {
64          if (logger.isLoggable(level))
65          {
66              if (message instanceof Throwable)
67              {
68                  logger.logp(level, logger.getName(), "", "Exception:", (Throwable) message);
69              }
70              else
71              {
72                  logger.logp(level, logger.getName(), "",
73                          message == null ? null : message.toString());
74              }
75          }
76      }
77  
78      private void log(final Level level, final String message, final Throwable t)
79      {
80          if (logger.isLoggable(level))
81          {
82              logger.logp(level, logger.getName(), "", message, t);
83          }
84      }
85  
86      private void log(final Level level, final String message, final Object... params)
87      {
88          if (logger.isLoggable(level))
89          {
90              final MessageFormatter formatter = new MessageFormatter(message, params);
91              if (formatter.hasThrowable())
92              {
93                  logger.logp(level, logger.getName(), "",
94                          formatter.getFormattedMessage(), formatter.getThrowable());
95              }
96              else
97              {
98                  logger.logp(level, logger.getName(), "",
99                          formatter.getFormattedMessage());
100             }
101         }
102     }
103 
104     private void log(final Level level, final String message, final Supplier<?>... paramSuppliers)
105     {
106         if (logger.isLoggable(level))
107         {
108             final MessageFormatter formatter = new MessageFormatter(message, paramSuppliers);
109             if (formatter.hasThrowable())
110             {
111                 logger.logp(level, logger.getName(), "",
112                         formatter.getFormattedMessage(), formatter.getThrowable());
113             }
114             else
115             {
116                 logger.logp(level, logger.getName(), "",
117                         formatter.getFormattedMessage());
118             }
119         }
120     }
121 
122     /**
123      * Logs a message object with the DEBUG level.
124      *
125      * @param message the message string to log.
126      */
127     @Override
128     public void debug(final String message)
129     {
130         log(Level.FINE, message);
131     }
132 
133     /**
134      * Logs a message object with the DEBUG level.
135      *
136      * @param message the message object to log.
137      */
138     @Override
139     public void debug(final Object message)
140     {
141         log(Level.FINE, message);
142     }
143 
144     /**
145      * Logs a message with parameters at the DEBUG level.
146      *
147      * @param message the message to log; the format depends on the message factory.
148      * @param params parameters to the message.
149      */
150     @Override
151     public void debug(final String message, final Object... params)
152     {
153         log(Level.FINE, message, params);
154     }
155 
156     /**
157      * Logs a message with parameters which are only to be constructed if the
158      * logging level is the DEBUG level.
159      *
160      * @param message the message to log; the format depends on the message factory.
161      * @param paramSuppliers An array of functions, which when called,
162      *        produce the desired log message parameters.
163      */
164     @Override
165     public void debug(final String message, final Supplier<?>... paramSuppliers)
166     {
167         log(Level.FINE, message, paramSuppliers);
168     }
169 
170     /**
171      * Logs a message at the DEBUG level including the stack trace of the {@link Throwable}
172      * <code>t</code> passed as parameter.
173      *
174      * @param message the message to log.
175      * @param t the exception to log, including its stack trace.
176      */
177     @Override
178     public void debug(final String message, final Throwable t)
179     {
180         log(Level.FINE, message, t);
181     }
182 
183     /**
184      * Logs a message object with the ERROR level.
185      *
186      * @param message the message string to log.
187      */
188     @Override
189     public void error(final String message)
190     {
191         log(Level.SEVERE, message);
192     }
193 
194     /**
195      * Logs a message object with the ERROR level.
196      *
197      * @param message the message object to log.
198      */
199     @Override
200     public void error(final Object message)
201     {
202         log(Level.SEVERE, message);
203     }
204 
205     /**
206      * Logs a message with parameters at the ERROR level.
207      *
208      * @param message the message to log; the format depends on the message factory.
209      * @param params parameters to the message.
210      */
211     @Override
212     public void error(final String message, final Object... params)
213     {
214         log(Level.SEVERE, message, params);
215     }
216 
217     /**
218      * Logs a message with parameters which are only to be constructed if the
219      * logging level is the ERROR level.
220      *
221      * @param message the message to log; the format depends on the message factory.
222      * @param paramSuppliers An array of functions, which when called, produce
223      *        the desired log message parameters.
224      * @since 2.4
225      */
226     @Override
227     public void error(final String message, final Supplier<?>... paramSuppliers)
228     {
229         log(Level.SEVERE, message, paramSuppliers);
230     }
231 
232     /**
233      * Logs a message at the ERROR level including the stack trace of the {@link Throwable}
234      * <code>t</code> passed as parameter.
235      *
236      * @param message the message object to log.
237      * @param t the exception to log, including its stack trace.
238      */
239     @Override
240     public void error(final String message, final Throwable t)
241     {
242         log(Level.SEVERE, message, t);
243     }
244 
245     /**
246      * Logs a message object with the FATAL level.
247      *
248      * @param message the message string to log.
249      */
250     @Override
251     public void fatal(final String message)
252     {
253         log(Level.SEVERE, message);
254     }
255 
256     /**
257      * Logs a message object with the FATAL level.
258      *
259      * @param message the message object to log.
260      */
261     @Override
262     public void fatal(final Object message)
263     {
264         log(Level.SEVERE, message);
265     }
266 
267     /**
268      * Logs a message with parameters at the FATAL level.
269      *
270      * @param message the message to log; the format depends on the message factory.
271      * @param params parameters to the message.
272      */
273     @Override
274     public void fatal(final String message, final Object... params)
275     {
276         log(Level.SEVERE, message, params);
277     }
278 
279     /**
280      * Logs a message with parameters which are only to be constructed if the
281      * logging level is the FATAL level.
282      *
283      * @param message the message to log; the format depends on the message factory.
284      * @param paramSuppliers An array of functions, which when called, produce the
285      *        desired log message parameters.
286      */
287     @Override
288     public void fatal(final String message, final Supplier<?>... paramSuppliers)
289     {
290         log(Level.SEVERE, message, paramSuppliers);
291     }
292 
293     /**
294      * Logs a message at the FATAL level including the stack trace of the {@link Throwable}
295      * <code>t</code> passed as parameter.
296      *
297      * @param message the message object to log.
298      * @param t the exception to log, including its stack trace.
299      */
300     @Override
301     public void fatal(final String message, final Throwable t)
302     {
303         log(Level.SEVERE, message, t);
304     }
305 
306     /**
307      * Gets the logger name.
308      *
309      * @return the logger name.
310      */
311     @Override
312     public String getName()
313     {
314         return logger.getName();
315     }
316 
317     /**
318      * Logs a message object with the INFO level.
319      *
320      * @param message the message string to log.
321      */
322     @Override
323     public void info(final String message)
324     {
325         log(Level.INFO, message);
326     }
327 
328     /**
329      * Logs a message object with the INFO level.
330      *
331      * @param message the message object to log.
332      */
333     @Override
334     public void info(final Object message)
335     {
336         log(Level.INFO, message);
337     }
338 
339     /**
340      * Logs a message with parameters at the INFO level.
341      *
342      * @param message the message to log; the format depends on the message factory.
343      * @param params parameters to the message.
344      */
345     @Override
346     public void info(final String message, final Object... params)
347     {
348         log(Level.INFO, message, params);
349     }
350 
351     /**
352      * Logs a message with parameters which are only to be constructed if the
353      * logging level is the INFO level.
354      *
355      * @param message the message to log; the format depends on the message factory.
356      * @param paramSuppliers An array of functions, which when called, produce
357      *        the desired log message parameters.
358      */
359     @Override
360     public void info(final String message, final Supplier<?>... paramSuppliers)
361     {
362         log(Level.INFO, message, paramSuppliers);
363     }
364 
365     /**
366      * Logs a message at the INFO level including the stack trace of the {@link Throwable}
367      * <code>t</code> passed as parameter.
368      *
369      * @param message the message object to log.
370      * @param t the exception to log, including its stack trace.
371      */
372     @Override
373     public void info(final String message, final Throwable t)
374     {
375         log(Level.INFO, message, t);
376     }
377 
378     /**
379      * Checks whether this Logger is enabled for the DEBUG Level.
380      *
381      * @return boolean - {@code true} if this Logger is enabled for level DEBUG, {@code false}
382      *         otherwise.
383      */
384     @Override
385     public boolean isDebugEnabled()
386     {
387         return logger.isLoggable(Level.FINE);
388     }
389 
390     /**
391      * Checks whether this Logger is enabled for the ERROR Level.
392      *
393      * @return boolean - {@code true} if this Logger is enabled for level ERROR, {@code false}
394      *         otherwise.
395      */
396     @Override
397     public boolean isErrorEnabled()
398     {
399         return logger.isLoggable(Level.SEVERE);
400     }
401 
402     /**
403      * Checks whether this Logger is enabled for the FATAL Level.
404      *
405      * @return boolean - {@code true} if this Logger is enabled for level FATAL, {@code false}
406      *         otherwise.
407      */
408     @Override
409     public boolean isFatalEnabled()
410     {
411         return logger.isLoggable(Level.SEVERE);
412     }
413 
414     /**
415      * Checks whether this Logger is enabled for the INFO Level.
416      *
417      * @return boolean - {@code true} if this Logger is enabled for level INFO, {@code false}
418      *         otherwise.
419      */
420     @Override
421     public boolean isInfoEnabled()
422     {
423         return logger.isLoggable(Level.INFO);
424     }
425 
426     /**
427      * Checks whether this Logger is enabled for the TRACE level.
428      *
429      * @return boolean - {@code true} if this Logger is enabled for level TRACE, {@code false}
430      *         otherwise.
431      */
432     @Override
433     public boolean isTraceEnabled()
434     {
435         return logger.isLoggable(Level.FINER);
436     }
437 
438     /**
439      * Checks whether this Logger is enabled for the WARN Level.
440      *
441      * @return boolean - {@code true} if this Logger is enabled for level WARN, {@code false}
442      *         otherwise.
443      */
444     @Override
445     public boolean isWarnEnabled()
446     {
447         return logger.isLoggable(Level.WARNING);
448     }
449 
450     /**
451      * Logs a message object with the TRACE level.
452      *
453      * @param message the message string to log.
454      */
455     @Override
456     public void trace(final String message)
457     {
458         log(Level.FINER, message);
459     }
460 
461     /**
462      * Logs a message object with the TRACE level.
463      *
464      * @param message the message object to log.
465      */
466     @Override
467     public void trace(final Object message)
468     {
469         log(Level.FINER, message);
470     }
471 
472     /**
473      * Logs a message with parameters at the TRACE level.
474      *
475      * @param message the message to log; the format depends on the message factory.
476      * @param params parameters to the message.
477      */
478     @Override
479     public void trace(final String message, final Object... params)
480     {
481         log(Level.FINER, message, params);
482     }
483 
484     /**
485      * Logs a message with parameters which are only to be constructed if the
486      * logging level is the TRACE level.
487      *
488      * @param message the message to log; the format depends on the message factory.
489      * @param paramSuppliers An array of functions, which when called, produce
490      *        the desired log message parameters.
491      */
492     @Override
493     public void trace(final String message, final Supplier<?>... paramSuppliers)
494     {
495         log(Level.FINER, message, paramSuppliers);
496     }
497 
498     /**
499      * Logs a message at the TRACE level including the stack trace of the {@link Throwable}
500      * <code>t</code> passed as parameter.
501      *
502      * @param message the message object to log.
503      * @param t the exception to log, including its stack trace.
504      * @see #debug(String)
505      */
506     @Override
507     public void trace(final String message, final Throwable t)
508     {
509         log(Level.FINER, message, t);
510     }
511 
512     /**
513      * Logs a message object with the WARN level.
514      *
515      * @param message the message string to log.
516      */
517     @Override
518     public void warn(final String message)
519     {
520         log(Level.WARNING, message);
521     }
522 
523     /**
524      * Logs a message object with the WARN level.
525      *
526      * @param message the message object to log.
527      */
528     @Override
529     public void warn(final Object message)
530     {
531         log(Level.WARNING, message);
532     }
533 
534     /**
535      * Logs a message with parameters at the WARN level.
536      *
537      * @param message the message to log; the format depends on the message factory.
538      * @param params parameters to the message.
539      */
540     @Override
541     public void warn(final String message, final Object... params)
542     {
543         log(Level.WARNING, message, params);
544     }
545 
546     /**
547      * Logs a message with parameters which are only to be constructed if the
548      * logging level is the WARN level.
549      *
550      * @param message the message to log; the format depends on the message factory.
551      * @param paramSuppliers An array of functions, which when called, produce
552      *        the desired log message parameters.
553      */
554     @Override
555     public void warn(final String message, final Supplier<?>... paramSuppliers)
556     {
557         log(Level.WARNING, message, paramSuppliers);
558     }
559 
560     /**
561      * Logs a message at the WARN level including the stack trace of the {@link Throwable}
562      * <code>t</code> passed as parameter.
563      *
564      * @param message the message object to log.
565      * @param t the exception to log, including its stack trace.
566      */
567     @Override
568     public void warn(final String message, final Throwable t)
569     {
570         log(Level.WARNING, message, t);
571     }
572 }