异常日志监控之日志采集

1、 异常日志监控概述

异常日志监控十分重要,可以帮助开发和运维同学看到目前线上异常日志的分类和频率,能迅速定位到代码,不必要登录到机器上一个个查找,异常日志监控平台能清晰的知道该异常类型在5分钟内、15分钟内、30分钟内出现的次数和异常完整的堆栈信息,这样在界面上展示出来一目了然。在中小公司可能没有这样的平台,基本上只有核心开发同学才有权限登录到跳板机去查线上日志情况,一个开发团队里,估计也只有3个人左右才有这样的权限。这样的需求在大团队开发就非常的明显了,所以大的公司都会有这样的监控平台。其实开发这样的监控平台并不困难,今天就来异常日志监控之日志采集。

2、Log4j扩展&demo示例

在Log4j里,要继承一个重要的抽象类AppenderSkeleton,重写它的一个方法append(LoggingEvent event),整个日志采集就在该方法里完成的。下面通过一个简单的demo示例来说明。

/**
* Created by gaofla on 2018/3/8.
*/
public class AppenderTest extends AppenderSkeleton {

@Override
protected void append(LoggingEvent event) {
Level level = event.getLevel();

if (level == Level.ERROR) {
String stackTraceInfo = "";

ThrowableInformation errorInfo = event.getThrowableInformation();
LocationInfo locationInfo = event.getLocationInformation();

if (errorInfo != null) {
Throwable throwable = errorInfo.getThrowable();
StringWriter buf = new StringWriter();
throwable.printStackTrace(new PrintWriter(buf));
stackTraceInfo = buf.toString();
}

String codeInfo = locationInfo.fullInfo;
String logMessage = (String) event.getMessage();

if (stackTraceInfo.length() > 0) {
System.out.printf("stackTraceInfo=%s codeInfo=%s\n logMessage=%s\n\n", stackTraceInfo, codeInfo, logMessage);
} else {
System.out.printf("codeInfo=%s\n logMessage=%s\n\n", codeInfo, logMessage);
}

}
}

@Override
public void close() {

}

@Override
public boolean requiresLayout() {
return true;
}
}

再来一个测试例子看一下哈。

/**
* Created by gaofla on 2018/3/8.
*/
public class Test {

private static final Logger log = Logger.getLogger(Test.class);

public static void main(String args[]) {

String str = null;
log.error("Error log start print....");
try {
System.out.println(str.length());
} catch (Exception e) {
log.error("Exception.print", e);
}


}
}

看一下输出了:

codeInfo=com.monitor.log.demo.Test.main(Test.java:16)
logMessage=Error log start print....

stackTraceInfo=java.lang.NullPointerException
at com.monitor.log.demo.Test.main(Test.java:18)
codeInfo=com.monitor.log.demo.Test.main(Test.java:20)
logMessage=Exception.print


3、总结

上面只是一个示例说明原理,要达到生产级别,还有一些事要做,后续拿一个真实的例子和大家分享。当然日志监控有不同的方法,欢迎大家和我一起讨论,可以加我微信(手机:13512717641)。

你可能感兴趣的:(异常日志监控之日志采集)