Chinaunix

标题: 问个问题 关于log的写法 [已解决] [打印本页]

作者: realmon    时间: 2010-05-19 14:56
标题: 问个问题 关于log的写法 [已解决]
本帖最后由 realmon 于 2010-05-24 10:25 编辑
  1. if(logger.isDebugEnabled()){
  2.     logger.debug("*****");
  3. }
复制代码
为什么要写这个if
作者: sakulagi    时间: 2010-05-20 09:20
用来控制什么情况下需要记录日志,如果没有设置debug标志的话,就不需要写日志。不过我觉得在debug()方法里判断也是一样的。看你的logger是怎么设计的了
作者: realmon    时间: 2010-05-20 16:34
补充一下,我说的是apache的common logging
日志级别 比debug高的话,不写上面的if也不会输出log
所以搞不懂为什么要写 if(logger.isDebugEnabled())
作者: 0vk0    时间: 2010-05-20 23:53
是为了通用性,也许其它的机器会出现这样的问题
作者: kafka0102    时间: 2010-05-22 15:17
回复 4# 0vk0

对于像debug级别,线上的服务通常是关闭的,这使得debug函数会有开销。这个开销有两方面:
1、判断log级别,也就是isDebugEnabled函数,这个调用的开销很小的。
2、log的参数构造,很多情况下,log函数的参数是如"xxx"+"dd"+object.toString()这样的字符串拼接,这个开销还是有一些的。

所以,为了降低debug级别带来的开销问题,通常就是加了一层判断。如果debug日志很多,这个判断有时就显得重要了。
作者: realmon    时间: 2010-05-24 10:24
回复 5# kafka0102


   原来如此,学习了!
作者: surpass_li    时间: 2010-05-24 12:53
五楼说的很有道里
作者: gnah    时间: 2010-05-27 22:30
{:3_182:}
作者: asdmonster    时间: 2010-05-28 09:37
回复 2# sakulagi


   樱木斑竹,驾临java版啦。{:3_187:}
作者: asdmonster    时间: 2010-05-28 09:41
回复 1# realmon


    简单的说,就是这段代码写错了,写代码的人水平菜。
    判断日志级别这种事应该是组件自己去做的,怎么可能放到应用代码里面?

    至于所谓的构造实参的代价,远小于你调用函数的代价。
作者: 人生美妙    时间: 2010-05-28 11:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: realmon    时间: 2010-05-28 18:12
回复 10# asdmonster


    不是写错,spring的source里就有这样的代码
作者: realmon    时间: 2010-05-28 18:13
回复 11# 人生美妙


    不要利用我的帖子做广告




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2