KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > log > LogRedirectionTest


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.mx4j.log;
10
11 import java.io.BufferedReader JavaDoc;
12 import java.io.ByteArrayOutputStream JavaDoc;
13 import java.io.PrintStream JavaDoc;
14 import java.io.StringReader JavaDoc;
15 import java.net.URL JavaDoc;
16 import javax.management.MBeanServer JavaDoc;
17 import javax.management.MBeanServerFactory JavaDoc;
18 import javax.management.MBeanServerInvocationHandler JavaDoc;
19 import javax.management.Notification JavaDoc;
20 import javax.management.NotificationListener JavaDoc;
21 import javax.management.ObjectName JavaDoc;
22
23 import mx4j.log.Log;
24 import mx4j.log.Log4JLogger;
25 import mx4j.log.Logger;
26 import mx4j.log.LoggerBroadcasterMBean;
27 import org.apache.log4j.ConsoleAppender;
28 import org.apache.log4j.PatternLayout;
29 import test.MX4JTestCase;
30 import test.MutableInteger;
31
32 /**
33  * @version $Revision: 1.9 $
34  * @see
35  */

36 public class LogRedirectionTest extends MX4JTestCase
37 {
38    private int m_defaultPriority;
39
40    public LogRedirectionTest(String JavaDoc s)
41    {
42       super(s);
43    }
44
45    protected void setUp() throws Exception JavaDoc
46    {
47       m_defaultPriority = Log.getDefaultPriority();
48       Log.setDefaultPriority(Logger.TRACE);
49    }
50
51    protected void tearDown() throws Exception JavaDoc
52    {
53       Log.setDefaultPriority(m_defaultPriority);
54    }
55
56    public void testDirectRedirection() throws Exception JavaDoc
57    {
58       PrintStream JavaDoc out = System.out;
59       ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
60       try
61       {
62          // Replace System.out be be able to check results
63
System.setOut(new PrintStream JavaDoc(baos));
64
65          // Redirect logging
66
Log.redirectTo(new LoggerTestRedirector());
67
68          // Create some log
69
MBeanServer JavaDoc server = newMBeanServer();
70          server.createMBean("javax.management.loading.MLet", new ObjectName JavaDoc(":type=test"), null);
71       }
72       finally
73       {
74          // Stop redirection
75
Log.redirectTo(null);
76 // Re-set normal System.out
77
System.setOut(out);
78       }
79
80       // Collect and test results
81
byte[] bytes = baos.toByteArray();
82       String JavaDoc log = new String JavaDoc(bytes);
83       BufferedReader JavaDoc br = new BufferedReader JavaDoc(new StringReader JavaDoc(log));
84       String JavaDoc line = null;
85       while ((line = br.readLine()) != null)
86       {
87          if (!line.startsWith("{")) fail("Redirection failed");
88       }
89    }
90
91    public void testMBeanRedirection() throws Exception JavaDoc
92    {
93       MBeanServer JavaDoc server = newMBeanServer();
94       ObjectName JavaDoc name = new ObjectName JavaDoc(":type=test");
95       // Register a logger mbean
96
server.createMBean("mx4j.log.LoggerBroadcaster", name, null);
97       LoggerBroadcasterMBean redirector = (LoggerBroadcasterMBean)MBeanServerInvocationHandler.newProxyInstance(server, name, LoggerBroadcasterMBean.class, false);
98
99       try
100       {
101          // Register a notification listener
102
final MutableInteger notified = new MutableInteger(0);
103          NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
104          {
105             public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
106             {
107                notified.set(notified.get() + 1);
108             }
109          };
110
111          server.addNotificationListener(name, listener, null, null);
112
113          // Redirect logging
114
redirector.start();
115
116          // Create some log
117
ObjectName JavaDoc mlet = new ObjectName JavaDoc(":type=mlet");
118          server.createMBean("javax.management.loading.MLet", mlet, null);
119          // This should create some log
120
server.invoke(mlet, "addURL", new Object JavaDoc[]{new URL JavaDoc("http://mx4j.sourceforge.net")}, new String JavaDoc[]{"java.net.URL"});
121
122          // Test if redirection worked
123
if (notified.get() < 1) fail("Notification listener not called");
124       }
125       finally
126       {
127          redirector.stop();
128       }
129    }
130
131    public void testLog4JRedirection() throws Exception JavaDoc
132    {
133       PrintStream JavaDoc out = System.out;
134       ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
135       try
136       {
137          // Replace System.out be be able to check results
138
System.setOut(new PrintStream JavaDoc(baos));
139
140          org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger();
141          root.removeAllAppenders();
142          ConsoleAppender console = new ConsoleAppender(new PatternLayout("[%c] %p: %m%n"));
143          root.addAppender(console);
144          Log.redirectTo(new Log4JLogger());
145
146          // Create some log
147
newMBeanServer();
148       }
149       finally
150       {
151          // Stop redirection
152
Log.redirectTo(null);
153 // Re-set normal System.out
154
System.setOut(out);
155
156          org.apache.log4j.Logger.getRoot().removeAllAppenders();
157       }
158
159       // Collect and test results
160
byte[] bytes = baos.toByteArray();
161       String JavaDoc log = new String JavaDoc(bytes);
162       BufferedReader JavaDoc br = new BufferedReader JavaDoc(new StringReader JavaDoc(log));
163       String JavaDoc line = null;
164       while ((line = br.readLine()) != null)
165       {
166          if (!line.startsWith("["))
167          {
168             fail("Redirection failed");
169          }
170       }
171    }
172
173    public void testPartialDirectRedirection() throws Exception JavaDoc
174    {
175       PrintStream JavaDoc out = System.out;
176       ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
177
178       String JavaDoc category = MBeanServerFactory JavaDoc.class.getName();
179       try
180       {
181          // Replace System.out be be able to check results
182
System.setOut(new PrintStream JavaDoc(baos));
183
184          org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger();
185          root.removeAllAppenders();
186          ConsoleAppender console = new ConsoleAppender(new PatternLayout("[%c] %p: %m%n"));
187          root.addAppender(console);
188          Log.redirectTo(new Log4JLogger(), category);
189          Log.redirectTo(new LoggerTestRedirector());
190
191          // Create some log for log4j redirector
192
MBeanServer JavaDoc server = newMBeanServer();
193
194          // Create some log for the test redirector
195
ObjectName JavaDoc mlet = new ObjectName JavaDoc(":type=mlet");
196          server.createMBean("javax.management.loading.MLet", mlet, null);
197          // This should create one info log
198
server.invoke(mlet, "addURL", new Object JavaDoc[]{new URL JavaDoc("http://mx4j.sourceforge.net")}, new String JavaDoc[]{"java.net.URL"});
199       }
200       finally
201       {
202          // Stop redirection
203
Log.redirectTo(null);
204          Log.redirectTo(null, category);
205 // Re-set normal System.out
206
System.setOut(out);
207
208          org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
209       }
210
211       // Collect and test results
212
byte[] bytes = baos.toByteArray();
213       String JavaDoc log = new String JavaDoc(bytes);
214       BufferedReader JavaDoc br = new BufferedReader JavaDoc(new StringReader JavaDoc(log));
215       String JavaDoc line = null;
216       boolean bracketFound = false, braceFound = false;
217       while ((line = br.readLine()) != null)
218       {
219          System.out.println(line);
220          if (line.startsWith("["))
221          {
222             bracketFound = true;
223          }
224          else if (line.startsWith("{"))
225          {
226             braceFound = true;
227          }
228          else
229          {
230             fail("Redirection failed");
231          }
232       }
233       if (!bracketFound || !braceFound)
234       {
235          fail("Redirection failed");
236       }
237    }
238
239    public static class LoggerTestRedirector extends Logger
240    {
241       public LoggerTestRedirector()
242       {
243          super.setPriority(Logger.TRACE);
244       }
245
246       public void setPriority(int priority)
247       {
248          // Ignore the default priority set by the internal logging system
249
// Here we want to trace
250
}
251
252       protected void log(int priority, Object JavaDoc message, Throwable JavaDoc t)
253       {
254          String JavaDoc msg = message == null ? "" : message.toString();
255          StringBuffer JavaDoc b = new StringBuffer JavaDoc("{").append(getCategory()).append("} ").append(msg);
256          super.log(priority, b, t);
257       }
258    }
259 }
260
Popular Tags