1 8 9 package test.mx4j.log; 10 11 import java.io.BufferedReader ; 12 import java.io.ByteArrayOutputStream ; 13 import java.io.PrintStream ; 14 import java.io.StringReader ; 15 import java.net.URL ; 16 import javax.management.MBeanServer ; 17 import javax.management.MBeanServerFactory ; 18 import javax.management.MBeanServerInvocationHandler ; 19 import javax.management.Notification ; 20 import javax.management.NotificationListener ; 21 import javax.management.ObjectName ; 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 36 public class LogRedirectionTest extends MX4JTestCase 37 { 38 private int m_defaultPriority; 39 40 public LogRedirectionTest(String s) 41 { 42 super(s); 43 } 44 45 protected void setUp() throws Exception 46 { 47 m_defaultPriority = Log.getDefaultPriority(); 48 Log.setDefaultPriority(Logger.TRACE); 49 } 50 51 protected void tearDown() throws Exception 52 { 53 Log.setDefaultPriority(m_defaultPriority); 54 } 55 56 public void testDirectRedirection() throws Exception 57 { 58 PrintStream out = System.out; 59 ByteArrayOutputStream baos = new ByteArrayOutputStream (); 60 try 61 { 62 System.setOut(new PrintStream (baos)); 64 65 Log.redirectTo(new LoggerTestRedirector()); 67 68 MBeanServer server = newMBeanServer(); 70 server.createMBean("javax.management.loading.MLet", new ObjectName (":type=test"), null); 71 } 72 finally 73 { 74 Log.redirectTo(null); 76 System.setOut(out); 78 } 79 80 byte[] bytes = baos.toByteArray(); 82 String log = new String (bytes); 83 BufferedReader br = new BufferedReader (new StringReader (log)); 84 String 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 92 { 93 MBeanServer server = newMBeanServer(); 94 ObjectName name = new ObjectName (":type=test"); 95 server.createMBean("mx4j.log.LoggerBroadcaster", name, null); 97 LoggerBroadcasterMBean redirector = (LoggerBroadcasterMBean)MBeanServerInvocationHandler.newProxyInstance(server, name, LoggerBroadcasterMBean.class, false); 98 99 try 100 { 101 final MutableInteger notified = new MutableInteger(0); 103 NotificationListener listener = new NotificationListener () 104 { 105 public void handleNotification(Notification notification, Object handback) 106 { 107 notified.set(notified.get() + 1); 108 } 109 }; 110 111 server.addNotificationListener(name, listener, null, null); 112 113 redirector.start(); 115 116 ObjectName mlet = new ObjectName (":type=mlet"); 118 server.createMBean("javax.management.loading.MLet", mlet, null); 119 server.invoke(mlet, "addURL", new Object []{new URL ("http://mx4j.sourceforge.net")}, new String []{"java.net.URL"}); 121 122 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 132 { 133 PrintStream out = System.out; 134 ByteArrayOutputStream baos = new ByteArrayOutputStream (); 135 try 136 { 137 System.setOut(new PrintStream (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 newMBeanServer(); 148 } 149 finally 150 { 151 Log.redirectTo(null); 153 System.setOut(out); 155 156 org.apache.log4j.Logger.getRoot().removeAllAppenders(); 157 } 158 159 byte[] bytes = baos.toByteArray(); 161 String log = new String (bytes); 162 BufferedReader br = new BufferedReader (new StringReader (log)); 163 String 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 174 { 175 PrintStream out = System.out; 176 ByteArrayOutputStream baos = new ByteArrayOutputStream (); 177 178 String category = MBeanServerFactory .class.getName(); 179 try 180 { 181 System.setOut(new PrintStream (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 MBeanServer server = newMBeanServer(); 193 194 ObjectName mlet = new ObjectName (":type=mlet"); 196 server.createMBean("javax.management.loading.MLet", mlet, null); 197 server.invoke(mlet, "addURL", new Object []{new URL ("http://mx4j.sourceforge.net")}, new String []{"java.net.URL"}); 199 } 200 finally 201 { 202 Log.redirectTo(null); 204 Log.redirectTo(null, category); 205 System.setOut(out); 207 208 org.apache.log4j.Logger.getRootLogger().removeAllAppenders(); 209 } 210 211 byte[] bytes = baos.toByteArray(); 213 String log = new String (bytes); 214 BufferedReader br = new BufferedReader (new StringReader (log)); 215 String 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 } 251 252 protected void log(int priority, Object message, Throwable t) 253 { 254 String msg = message == null ? "" : message.toString(); 255 StringBuffer b = new StringBuffer ("{").append(getCategory()).append("} ").append(msg); 256 super.log(priority, b, t); 257 } 258 } 259 } 260 | Popular Tags |