/** * Returns a ThreadDumpMessage using the data in the proxy. * @return a ThreadDumpMessage. */ protected Object readResolve() { return new ThreadDumpMessage(formattedMsg, title); } }
ThreadDumpMessageProxy(final ThreadDumpMessage msg) { this.formattedMsg = msg.getFormattedMessage(); this.title = msg.title; }
/** * Returns the ThreadDump in printable format. * @return the ThreadDump suitable for logging. */ @Override public String getFormattedMessage() { if (formattedMessage != null) { return formattedMessage; } final StringBuilder sb = new StringBuilder(255); formatTo(sb); return sb.toString(); }
@Test public void testMessage() { final ThreadDumpMessage msg = new ThreadDumpMessage("Testing"); final String message = msg.getFormattedMessage(); //System.out.print(message); assertTrue("No header", message.contains(" Id=")); } }
@Test public void formatTo_usesCachedMessageString() throws Exception { final ThreadDumpMessage message = new ThreadDumpMessage(""); final String initial = message.getFormattedMessage(); assertFalse("no ThreadWithCountDownLatch thread yet", initial.contains("ThreadWithCountDownLatch")); final CountDownLatch started = new CountDownLatch(1); final CountDownLatch keepAlive = new CountDownLatch(1); final ThreadWithCountDownLatch thread = new ThreadWithCountDownLatch(started, keepAlive); thread.start(); started.await(); // ensure thread is running final StringBuilder result = new StringBuilder(); message.formatTo(result); assertFalse("no ThreadWithCountDownLatch captured", result.toString().contains("ThreadWithCountDownLatch")); assertEquals(initial, result.toString()); keepAlive.countDown(); // allow thread to die }
@Test public void testToString() { final ThreadDumpMessage msg = new ThreadDumpMessage("Test"); final String actual = msg.toString(); assertTrue(actual.contains("Test")); assertTrue(actual.contains("RUNNABLE")); assertTrue(actual.contains(getClass().getName())); }
private static ThreadInfoFactory getFactory() { if (FACTORY == null) { FACTORY = initFactory(ThreadDumpMessage.class.getClassLoader()); } return FACTORY; }
/** * Generate a ThreadDumpMessage with a title. * @param title The title. */ public ThreadDumpMessage(final String title) { this.title = title == null ? Strings.EMPTY : title; threads = getFactory().createThreadInfo(); }
@Test public void testMessage() { final ThreadDumpMessage msg = new ThreadDumpMessage("Testing"); final String message = msg.getFormattedMessage(); //System.out.print(message); assertTrue("No header", message.contains("Testing")); assertTrue("No RUNNABLE", message.contains("RUNNABLE")); assertTrue("No ThreadDumpMessage", message.contains("ThreadDumpMessage")); }
private static ThreadInfoFactory getFactory() { if (FACTORY == null) { FACTORY = initFactory(ThreadDumpMessage.class.getClassLoader()); } return FACTORY; }
/** * Generate a ThreadDumpMessage with a title. * @param title The title. */ public ThreadDumpMessage(final String title) { this.title = title == null ? Strings.EMPTY : title; threads = getFactory().createThreadInfo(); }
@Test public void testMessageWithLocks() throws Exception { final ReentrantLock lock = new ReentrantLock(); lock.lock(); final Thread thread1 = new Thread1(lock); thread1.start(); ThreadDumpMessage msg; synchronized(this) { final Thread thread2 = new Thread2(this); thread2.start(); try { Thread.sleep(200); msg = new ThreadDumpMessage("Testing"); } finally { lock.unlock(); } } final String message = msg.getFormattedMessage(); //System.out.print(message); assertTrue("No header", message.contains("Testing")); assertTrue("No RUNNABLE", message.contains("RUNNABLE")); assertTrue("No ThreadDumpMessage", message.contains("ThreadDumpMessage")); //assertTrue("No Locks", message.contains("waiting on")); //assertTrue("No syncronizers", message.contains("locked syncrhonizers")); }
@Override public String toString() { return getFormattedMessage(); }
@Override public ThreadDumpMessage get() { return new ThreadDumpMessage("Title of ..."); } });
/** * Returns the ThreadDump in printable format. * @return the ThreadDump suitable for logging. */ @Override public String getFormattedMessage() { if (formattedMessage != null) { return formattedMessage; } final StringBuilder sb = new StringBuilder(255); formatTo(sb); return sb.toString(); }
final ThreadDumpMessage message = new ThreadDumpMessage("Waiting"); System.err.print(message.getFormattedMessage());
@Override public void run() { actual[0] = msg.getFormattedMessage(); } };
@Test public void testUseConstructorThread() throws InterruptedException { // LOG4J2-763 final ThreadDumpMessage msg = new ThreadDumpMessage("Test"); final String[] actual = new String[1]; final Thread other = new Thread("OtherThread") { @Override public void run() { actual[0] = msg.getFormattedMessage(); } }; other.start(); other.join(); assertTrue("No mention of other thread in msg", !actual[0].contains("OtherThread")); }
@Override public String toString() { return getFormattedMessage(); }
/** * Returns a ThreadDumpMessage using the data in the proxy. * @return a ThreadDumpMessage. */ protected Object readResolve() { return new ThreadDumpMessage(formattedMsg, title); } }