昆明java培训
达内昆明广州春城路

18487146383

热门课程

你清楚你在记录什么吗?

  • 时间:2016-07-29
  • 发布:昆明Java培训
  • 来源:crazyacking

当我们写日志的时候,很多情况下,其实我们并不知道日志文件里到底打印了什么。所以,我们需要认真读一遍日志,从中找出异常的部分。那么,大概有哪些需要注意的地方呢?

首先,至少要避免空指针异常:

log.debug("Processing request with id: {}",request.getId());

你确认过request不是null了吗?

记录集合也是一个大坑。如果你用Hibernate从数据库里获取领域对象的集合的时候,不小心写成了这样:

log.debug("Returning users: {}",users);

slf4j只会在这条语句确实会打印的时候调用toString方法,当然这个很酷。不过如果内存溢出了,N+1选择问题,线程饿死,延迟初始化异常,日志存储空间用完了…这些都有可能发生。

最好的方式是只记录对象的ID(或者只记录集合的大小)。不过收集ID需要对每个对象调用getId方法,这个在Java里可真不是件简单的事。Groovy有个很棒的展开操作符(users*.id),在Java里我们可以用Commons Beanutils库来模拟下:

log.debug("Returning user ids: {}", collect(users,"id"));

collect方法大概是这么实现的:

public static Collectioncollect(Collection collection, String propertyName){

return CollectionUtils.collect(collection,new BeanToPropertyValueTransformer(propertyName));

}

最后要说的是,toString方法可能没有正确的实现或者使用。

首先,为了记录日志,为每个类创建一个toString的做法比比皆是,最好用 ToStringBuilder来生成(不过不是它的反射实现的那个版本)。

第二,注意数组和非典型的集合。数组和一些另类的集合的toString实现可能没有挨个调用每个元素的toString方法。可以使用JDK提供的Arrays#deepToString方法。经常检查一下你自己打印的日志,看有没有格式异常的一些信息。

关于日志,其实还有很多学问,很值得去认真学习和研究。程序员是个需要细心和耐心的工作,在工作中多思考、多检查将会对你大有益处。

上一篇:创建对象的方法
下一篇:不要忘了日志级别

Effective java的创建和销毁对象

昆明达内Java培训学费多少?

LinkedIn服务:三人行,必有我师【达内java培训】

Java培训:7月排行榜Go创新高Java稳第一

选择城市和中心
贵州省

广西省

海南省

台湾