1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mortbay.log;
17
18 import java.lang.reflect.Method;
19
20 public class Slf4jLog implements Logger
21 {
22 private static final String LOGGER="org.slf4j.Logger";
23 private static final String LOGGERFACTORY="org.slf4j.LoggerFactory";
24 private static final Object[] NO_ARGS=new Object[]{};
25 private Method infoSOO;
26 private Method debugSOO;
27 private Method debugST;
28 private Method debugEnabled;
29 private Method warnSOO;
30 private Method warnST;
31 private Method errorST;
32 private Object logger;
33
34
35 public Slf4jLog() throws Exception
36 {
37 this("org.mortbay.log");
38 }
39
40 public Slf4jLog(String name) throws Exception
41 {
42 Class slf4j = null;
43 Class slf4jf = null;
44 try
45 {
46 slf4j=this.getClass().getClassLoader().loadClass(LOGGER);
47 slf4jf=this.getClass().getClassLoader().loadClass(LOGGERFACTORY);
48 }
49 catch(Exception e)
50 {
51 slf4j=Thread.currentThread().getContextClassLoader()==null?Class.forName(LOGGER):Thread.currentThread().getContextClassLoader().loadClass(LOGGER);
52 slf4jf = Thread.currentThread().getContextClassLoader()==null?Class.forName(LOGGERFACTORY):Thread.currentThread().getContextClassLoader().loadClass(LOGGERFACTORY);
53 }
54
55 infoSOO = slf4j.getMethod("info", new Class[]{String.class,Object.class,Object.class});
56 debugSOO = slf4j.getMethod("debug", new Class[]{String.class,Object.class,Object.class});
57 debugST = slf4j.getMethod("debug", new Class[]{String.class,Throwable.class});
58 debugEnabled = slf4j.getMethod("isDebugEnabled", new Class[]{});
59 warnSOO = slf4j.getMethod("warn", new Class[]{String.class,Object.class,Object.class});
60 warnST = slf4j.getMethod("warn", new Class[]{String.class,Throwable.class});
61 errorST = slf4j.getMethod("error", new Class[]{String.class,Throwable.class});
62
63 Method getLogger = slf4jf.getMethod("getLogger", new Class[]{String.class});
64 logger=getLogger.invoke(null, new Object[]{name});
65 }
66
67
68
69
70
71 public void debug(String msg, Object arg0, Object arg1)
72 {
73 try{debugSOO.invoke(logger, new Object[]{msg,arg0,arg1});}
74 catch (Exception e) {e.printStackTrace();}
75 }
76
77
78
79
80
81 public void debug(String msg, Throwable th)
82 {
83 try{debugST.invoke(logger, new Object[]{msg,th});}
84 catch (Exception e) {e.printStackTrace();}
85 }
86
87
88
89
90
91 public boolean isDebugEnabled()
92 {
93 try{return ((Boolean)debugEnabled.invoke(logger, NO_ARGS)).booleanValue();}
94 catch (Exception e) {e.printStackTrace();return true;}
95 }
96
97
98
99
100
101 public void info(String msg, Object arg0, Object arg1)
102 {
103 try{infoSOO.invoke(logger, new Object[]{msg,arg0,arg1});}
104 catch (Exception e) {e.printStackTrace();}
105 }
106
107
108
109
110
111 public void warn(String msg, Object arg0, Object arg1)
112 {
113 try{warnSOO.invoke(logger, new Object[]{msg,arg0,arg1});}
114 catch (Exception e) {e.printStackTrace();}
115 }
116
117
118
119
120
121 public void warn(String msg, Throwable th)
122 {
123 try
124 {
125 if (th instanceof RuntimeException || th instanceof Error)
126 errorST.invoke(logger, new Object[]{msg,th});
127 else
128 warnST.invoke(logger, new Object[]{msg,th});
129 }
130 catch (Exception e) {e.printStackTrace();}
131 }
132
133
134 public Logger getLogger(String name)
135 {
136 try
137 {
138 return new Slf4jLog(name);
139 }
140 catch (Exception e)
141 {
142 Log.warn(e);
143 return this;
144 }
145 }
146
147
148 public String toString()
149 {
150 return logger.toString();
151 }
152
153
154 public void setDebugEnabled(boolean enabled)
155 {
156 warn("setDebugEnabled not implemented",null,null);
157 }
158 }