不再遗漏任何错误日志UncaughtExceptionHandler

发布于 2015-10-28 / Java / 0条评论 / 1,136浏览

有时候java程序会出现你意想不到的错误,有时候你会try…catch…有时候不会,当你没有捕获异常,你也无法通过log4j\logback等日志框架来记录日志,这样出错了只能去找控制台。很是麻烦

然而我现在要分享的就是能帮你把这个头疼的问题fix

不多说了,直接上马
CrashHandler.java

package com.denghb.common; import java.lang.Thread.UncaughtExceptionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CrashHandler implements UncaughtExceptionHandler { Logger log = LoggerFactory.getLogger(CrashHandler.class); private static CrashHandler ch = new CrashHandler(); public static CrashHandler getInstance() { return ch; } @Override public void uncaughtException(Thread t, Throwable e) { StackTraceElement[] ste = e.getStackTrace(); // Logger log = LoggerFactory.getLogger(ste[0].getClassName()); log.error(e.getMessage(), e); // MailUtil.send("Exception", e.getMessage()); } }

1、Spring 中设置

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="java.lang.Thread" /> <property name="targetMethod" value="setDefaultUncaughtExceptionHandler" /> <property name="arguments"> <list> <bean class="com.denghb.common.CrashHandler" /> </list> </property> </bean>

2、Main 中设置

public static void main(String[] args) { Thread.setDefaultUncaughtExceptionHandler(CrashHandler.getInstance()); ...

其实不仅仅是java能实现程序未知错误记录,其它的语言也都有类似的功能

js

window.onerror = function(message, url, line) {
 // xxx
};

iOS

NSSetUncaughtExceptionHandler

大概就这样了,

评论
站长统计