走自己的路

路漫漫其修远兮,吾将上下而求索

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  50 随笔 :: 4 文章 :: 118 评论 :: 0 Trackbacks
 
  1. Log4j debug log api不够丰富

在进入,退出方法时针对方法的输入参数和返回值进行log,log中含有方法信息

logDebugOnMethodEntry, logDebugOnMethodExit

  1. log级别问题

如果log级别设置的是info,会把warning,error,fatal都打出来,各个级别不能单独控制。增加各级别分开控制开关。

  1. log格式的定制

可以定制log信息的pattern,这样会看起来很统一,log分析起来也容易logDebug(String pattern, Object... paramValues);

还有一个好处,不需要预先把相关String都append起来,提高performance

  1. log.isDebugEnabled();

参考第三点,这样就避免了Object的toString和String的concat操作。

  1. EmptyLogger

每次记log时,log4j都需要判断这个级别是否可以打log。如果logger的每个级别都有对应的logger实例,如果debug level被关了,debug级别对应的实例就是EmptyLogger,EmptyLogger里面所有方法的实现都是空的,就不需要这额外的判断了。




posted on 2009-12-25 15:09 叱咤红人 阅读(2842) 评论(2)  编辑  收藏 所属分类: Design and Analysis Pattern J2SE and JVM

评论

# re: 对Log4j封装的一些想法[未登录] 2009-12-26 09:15 aaa
关于isDebugEnabled,你就算实现了一个空的EmptyLogger也没有用吧。
我记得写log.isDebugEnabled是为了防止某些字符串拼接的开销。
比如log.debug(xxx+xxx+xxx);  回复  更多评论
  

# re: 对Log4j封装的一些想法 2009-12-27 09:47 叱咤红人
@aaa
是的,是我记混了。我们公司有一个log framework对Log4J做了一层封装,把log的方法的参数都改成String了,但还有一些提供的方法,会把object都toString后再调用那些封装过的参数为String的log方法,所以出现了预先toString的情况。于是我们在写的时候也需要isDebugEnabled。没有和log4j的区分清楚,已经改正,您说的是我说的第四点,现在的第三点,恩,谢谢提醒。

  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: