论坛首页 Java企业应用论坛

無侵込式菂日志記錄

浏览 10327 次
精华帖 (0) :: 良好帖 (19) :: 新手帖 (2) :: 隐藏帖 (18)
作者 正文
   发表时间:2009-11-06  
OO

相信大家茬頊目仲苚菂日志記彔都是基于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){
  //
}

 

 

这样做日志唯一不好的地方就是,没办法更细粒度的记录日志了,例如方法里的一些临时变量的信息之类

   发表时间:2009-11-06  
拜托,别用火星文
0 请登录后投票
   发表时间:2009-11-06  
用注解和直接用log4j有啥区别?
0 请登录后投票
   发表时间:2009-11-06  
egmacross 写道
用注解和直接用log4j有啥区别?

当然有区别咯,我可以在日志切面里随时替换日志的实现方式咯,用了log4j,就绑死log4j了哦,在osgi这种环境下,会出错的哦
0 请登录后投票
   发表时间:2009-11-06  
听过slf4j吗,简单的替换就可以,再说了,就一个日志,绑定log4j又有什么不好的!!
0 请登录后投票
   发表时间:2009-11-06  
kjj 写道
听过slf4j吗,简单的替换就可以,再说了,就一个日志,绑定log4j又有什么不好的!!

用过slf4j,顺带提一句,绑定log4j可是很麻烦滴哟。业务级日志,处理的方式不仅仅是输出到console或者是file或者存到db就算完事的哟。也许我需要对这些日志做其他处理呢?也许我需要发送到另外一个专门的日志服务器里呢?

不管怎么样,业务人员不应该关心日志的去向,或者说业务编写人员根本不需要知道有日志这个概念才对。
所以不应该在代码中出现日志的概念来。。。。
0 请登录后投票
   发表时间:2009-11-06  
楼主的想法很不错。
如果能有办法支持本地化字符串,就更有趣了
0 请登录后投票
   发表时间:2009-11-06  
这样的框架我做过,感觉一般般,主要是日志的内容不好收集,有些是运行时的,有些要记录多条日志在一个业务方法中,当然有些场景应用起来还是非常OK的,最好还提供一些APPDER的实现
0 请登录后投票
   发表时间:2009-11-06  
那点“唯一”不好的地方,实在是太不好了。
0 请登录后投票
   发表时间:2009-11-07  
shevliu 写道
拜托,别用火星文

是呀 真想找到 这火星文是根据什么 出来的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics