View Javadoc

1   package org.lsst.ccs.utilities.logging;
2   
3   import org.apache.log4j.AppenderSkeleton;
4   import org.apache.log4j.Layout;
5   import org.apache.log4j.spi.LoggingEvent;
6   import org.apache.log4j.spi.ThrowableInformation;
7   
8   import java.util.logging.ErrorManager;
9   
10  /**
11   * simple bridge from Log4J to JUL.
12   * (some code copied from Apache but adapted to our needs)
13   *
14   * @author bamade
15   */
16  // Date: 03/06/13
17  
18  public class JULAppender  extends AppenderSkeleton{
19  
20      static enum Levelz {
21           ALL (java.util.logging.Level.ALL),
22           	DEBUG (java.util.logging.Level.FINE),
23          	ERROR (java.util.logging.Level.SEVERE),
24          	FATAL (java.util.logging.Level.SEVERE),
25           	INFO (java.util.logging.Level.INFO),
26           	OFF (java.util.logging.Level.OFF),
27           	TRACE (java.util.logging.Level.FINER),
28           	WARN  (java.util.logging.Level.WARNING);
29  
30          java.util.logging.Level julLevel ;
31          Levelz(java.util.logging.Level julLevel) {
32              this.julLevel = julLevel ;
33          }
34          public java.util.logging.Level getJulLevel() {
35              return this.julLevel ;
36          }
37      }
38      /** Creates a new appender with no special layout */
39      public JULAppender() {
40      }
41  
42      /** Creates a new appender with the specified layout */
43      public JULAppender(Layout layout) {
44          setLayout(layout);
45      }
46  
47      @Override
48      protected void append(LoggingEvent loggingEvent) {
49          org.lsst.ccs.utilities.logging.Logger logger = Logger
50                  .getLogger(loggingEvent.getLoggerName());
51          if(logger == null) {
52              LogManagement.ERROR_MANAGER.error("cannot link log4J code for "+ loggingEvent.getLoggerName(), null, ErrorManager.GENERIC_FAILURE);
53              return ;
54          }
55          String msg;
56          if (layout != null) {
57              msg = layout.format(loggingEvent);
58          } else {
59              msg = loggingEvent.getRenderedMessage();
60          }
61          String log4jLevelName = loggingEvent.getLevel().toString();
62          Levelz levelz = Levelz.valueOf(log4jLevelName) ;
63          ThrowableInformation ti = loggingEvent.getThrowableInformation();
64          if (ti == null) {
65              logger.logMessage(levelz.getJulLevel(), msg);
66          }
67          else {
68              logger.logSimpleThrowable(levelz.getJulLevel(), msg,
69                                        ti.getThrowable());
70          }
71      }
72  
73      @Override
74      public void close() {
75      }
76  
77      @Override
78      public boolean requiresLayout() {
79          return true;
80      }
81  }