java-ee - Java企业开发的日志究竟该怎么记?

查看:94
本文介绍了java-ee - Java企业开发的日志究竟该怎么记?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我有个疑惑,都说日志不该记录异常信息,诸如e.getMessage(),但这样的话,究竟怎么记这个日志才能在出现问题的时候一下能定位到问题出在哪里?因为生产环境和开发环境毕竟不一样,生产环境出错了,还得在开发环境检查bug,可能根本查不出来。

解决方案

说说我对日志的理解吧。
在实际开发过程中日志对我们是一个非常重要的东西,如果在运行时出现问题(大多情况看上去都是偶然性的,但是实际是必然现象),这种问题如果没有记录日志,要重现场景就很困难,如果无法重现场景调试又没有日志那要解决这个问题就需要神助了。

在每一个项目在不同的阶段对日志的处理也是不一样的,这取决于你项目的成熟度,如果你的项目足够成熟,功能已经足够完善并且也经过了考验那将日志级别适当放高甚至是关闭。

如果你的项目处于快速开发迭代的过程将日志记录详细并将日志级别放低这是非常有必要的,而且肯定是要记录堆栈信息,将参数准确的记录,这都会帮助你快速分析定位问题。
当然在程序运行时是有上下文的,在记录日志的时候尽量避免重复记录,因为重复的日志只会增加日志的文件大小,对于问题的定位并不会有太大的帮助

日志到底还应该记录什么呢,这个得仁者见仁智者见智了,我就说说我平时的做法吧。
比如我现在调用微信接口发送一个模板消息

  1. 在调用前记录完整的请求参数

  2. 调用完成后记录微信的返回结果

  3. 如果网络出现错误还需要将Exception记录下来

LOG.info("发送模板消息 ==>> {}:{}", url, params);
Response response = httpClient.newCall(request).execute();
LOG.info("发送模板消息 <<== {}", response);

byte[] b = response.body().bytes();
try {
    Map<String, String> result = objectMapper.readValue(b, STR_OBJ_MAP);
    if ("0".equals(result.get("errcode"))) {
        return "SUCCESS";
    }

    LOG.error("发送模板消息失败 <<== {}", result);
    ...
} catch (IOException e) {
    LOG.error("发送模板消息失败 <<== {}", new String(b, "UTF-8"), e);
    throw e;
}

PS:有的人可能认为日志记录太多会影响程序的性能,其实我觉得要根据实际情况而定,大多数我们都不会遇到这种情况,因为当项目足够稳定的时候日志完全可以将级别提高甚至是关闭,而且现在的技术log4j2logback处理速度已经非常快了在加上log4j2还支持异步日志处理。

是保证业务功能更重要还是其它

这篇关于java-ee - Java企业开发的日志究竟该怎么记?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆