相信大家茬頊目仲苚菂日志記彔都是基于AOP的方式吧。偶也是,用了spring提供的基于AspectJ的切面来完成的日志记录。但是日志记录的信息除记录时间外仅局限于记录类、方法、参数和返回值,提供不了多少有实用价值的业务信息。
大家一般是怎么记录业务信息的呢?直接在业务方法里调log的API?例如
log.info(userid+"录入一篇新的公文,公文id为:"+doc.id);
这样的话,业务和日志又绑定到一块去了。
偶后来所想的方法呀,是这样的,通过与类名相同的配置文件的方式来记录日志。
例如,可以在
com.xxx.businessobject.Business1.java的同级目录下,放置一个
com.xxx.businessobject.Business1.log.properties文件,文件内容为
addNewDoc=${user.id}插入了一个新的文档,文档id为${param[0].id} deleteDoc=${userid}删除了${result.num}个文档
其中${}里面的内容是类似于EL表达式的字符串,可以做几个简单的约定
${user}:代表当前操作用户
${user.id}:代表去当前操作用户的id属性
${param[0]}:代表第1个参数
${param[1].name}:代表第2个参数的name属性
${this.book.id}:代表当前对象的book属性的id成员变量
${result}:代表方法返回值
${result.num}:代表返回值对象的num属性。
这样就可以对代码无侵入式的业务级的日志记录了
当然啦,如果求方便的话,是可以不使用配置文件的哦,大家都觉得配置文件已经够多了
偶觉得用Annotation的话,看起来效果会更好
例如这样子
@Log("插入了一个新文档${params[0].id}"); public void addNewDoc(Doc doc){ // }
这样做日志唯一不好的地方就是,没办法更细粒度的记录日志了,例如方法里的一些临时变量的信息之类