做过服务端开发的同学都清楚日志是多么的重要,你要分析应用当天的 PV/UV,你需要对日志进行统计分析; 你需要排查程序 BUG, 你需要寻找日志中的异常信息等等, 所以, 建立一套合适的日志体系是非常有必要的.
日志体系一般都会遵循这么几个原则 :
根据应用的需要记录对应的信息
用于后期离线统计的日志信息与记录程序运行问题的日志分开存放
选择合适的日志结构和日志记录工具
本文介绍的日志记录环境 :
Spring/Rose Web 框架
SLF4J 日志类
JSON格式的日志
后端开发的时候往往在系统中都存在不只一套日志体系,这篇文章介绍的日志方案用于后期离线统计分析, 对于其他不同的情况需要根据服务的需求而定.
Json格式的信息易于存储和分析,对于规模不是很大的应用服务而言,使用Json格式用于日志记录是个非常不错的选择,由于日志一般都是按行存储,后期根据需要利用普通的Java程序或者Hadoop MapReduce 工具处理都特别的方便;而且Json格式其内部存储类似于map结构,以Key/Value的形式表达信息,基本能够满足实际的需求.
1. 日志示例
本文介绍的日志记录方法存储的日志信息就类似与下面这样 :
{
"Url":"http://localhost:8081/RoseStudy/hello/showHowToRecordLog","Uri":"/RoseStudy/hello/showHowToRecordLog","RemoteIp":"127.0.0.1","HostIp":"127.0.0.1","ActionName":"showHowToRecordLog","Time":1452233120220,"LogSource":1,"JsonResult":{
"errorCode":0,"reason":null,"result":"test show how to record log success...","status":"success"}}
可以看到,一行日志包含8个信息(只是测试使用,实际应用中需要根据自己的需求加入不同的类别信息), 分别记录着我们以后统计需要用到的信息.
那么,我们首先需要定义的就是这8个类型信息的常量字符串,以方便后期使用 :
/**
* 日志常量
* Created by zhanghu on 12/24/15.
*/
public class Constants_ {
/**
* 日志中包含的属性字段
* */
public static final String Url = "Url";
public static final String Uri = "Uri";
public static final String RemoteIp = "RemoteIp";
public static final String HostIp = "HostIp";
public static final String ActionName =