课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 你清楚你在记录什么吗?
  • 你清楚你在记录什么吗?

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

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

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

    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方法。经常检查一下你自己打印的日志,看有没有格式异常的一些信息。

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

    推荐文章

上一篇:创建对象的方法

下一篇:不要忘了日志级别

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56