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
12
13
14
15
16
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
39 public JULAppender() {
40 }
41
42
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 }