Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package com.yammer.metrics.util;
 
When a thread throws an Exception that was not caught, a DeathRattleExceptionHandler will increment a counter signalling a thread has died and print out the name and stack trace of the thread.

This makes it easy to build alerts on unexpected Thread deaths and fine grained used quickens debugging in production.

You can also set a DeathRattleExceptionHandler as the default exception handler on all threads, allowing you to get information on Threads you do not have direct control over.

Usage is straightforward:


 final Counter c = Metrics.newCounter(MyRunnable.class, "thread-deaths");
 Thread.UncaughtExceptionHandler exHandler = new DeathRattleExceptionHandler(c);
 final Thread myThread = new Thread(myRunnable, "MyRunnable");
 myThread.setUncaughtExceptionHandler(exHandler);
 

Setting the global default exception handler should be done first, like so:


 final Counter c = Metrics.newCounter(MyMainClass.class, "unhandled-thread-deaths");
 Thread.UncaughtExceptionHandler ohNoIDidntKnowAboutThis = new DeathRattleExceptionHandler(c);
 Thread.setDefaultUncaughtExceptionHandler(ohNoIDidntKnowAboutThis);
 
    private static final Logger LOGGER = LoggerFactory.getLogger(DeathRattleExceptionHandler.class);
    private final Counter counter;

    
Creates a new DeathRattleExceptionHandler with the given com.yammer.metrics.core.Counter.

Parameters:
counter the com.yammer.metrics.core.Counter which will be used to record the number of uncaught exceptions
    public DeathRattleExceptionHandler(Counter counter) {
        this. = counter;
    }
    @Override
    public void uncaughtException(Thread tThrowable e) {
        .inc();
        .error("Uncaught exception on thread {}"te);
    }
New to GrepCode? Check out our FAQ X