Java开发手册之日志规约[通俗易懂]

Java开发手册之日志规约[通俗易懂]Java开发手册之日志规约

大家好,又见面了,我是你们的朋友全栈君。

  1. 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架
    SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory; 
 private static final Logger logger = LoggerFactory.getLogger(Abc.class);  
  1. 【强制】日志文件推荐至少保存15天,因为有些异常具备以“周”为频次发生的特点。
  2. 【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:
    appName_logType_logName.log。logType:日志类型,推荐分类有stats/desc/monitor/visit等;
    logName:日志描述。这种命名的好处:通过文件名就可知道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。
    正例:mppserver应用中单独监控时区转换异常,如:
    mppserver_monitor_timeZoneConvert.log 

说明:推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于通过日志对系统进行及时监控。

  1. 【强制】对trace/debug/info级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
    说明logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);
    如果日志级别是warn,上述日志不会打印,但是会执行字符串拼接操作,如果symbol是对象,会执行toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。
    正例:(条件)

    if (logger.isDebugEnabled()) {    logger.debug("Processing trade with id: " + id + " and symbol: " + symbol);   
    }   

正例

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);  
  1. 【强制】避免重复打印日志,浪费磁盘空间,务必在log4j.xml中设置additivity=false。
    正例:
  2. 【强制】异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字throws往上抛出。
    正例logger.error(各类参数或者对象toString + "_" + e.getMessage(), e);
  3. 【推荐】谨慎地记录日志。生产环境禁止输出debug日志;有选择地输出info日志;如果使用warn来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。
    说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?
  4. 【参考】可以使用warn日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适从。注意日志输出的级别,error级别只记录系统逻辑出错、异常等重要的错误信息。
    如非必要,请不要在此场景打出error级别。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106525.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PCIE接口定义[通俗易懂]

    PCIE接口定义[通俗易懂]PCIExpress(PCIe,PCI-e)isahigh-speedserialcomputerexpansionbusstandard.PCIExpressasahigh-bandwidth,lowpincount,serial,interconnecttechnology.Itwasdesignedtoreplacetheol…

    2022年5月1日
    57
  • 【SpringBoot】33、SpringBoot+LayUI后台管理系统开发脚手架[通俗易懂]

    【SpringBoot】33、SpringBoot+LayUI后台管理系统开发脚手架[通俗易懂]本期给大家推荐我自己写一个开源项目:springboot-mini,本着减少大量重复开发工作的原则,使得在项目中能够实现快速开发1、前言本项目本着避免重复造轮子的原则,建立一套快速开发JavaWEB项目(springboot-mini),能满足大部分后台管理系统基础开发功能,使得开发人员直接可从业务模块开始,减少大量的重复开发工作。前端框架使用layui-mini(https://gitee.com/zhongshaofa/layuimini)2、项目地址https://gitee.com/asu

    2022年5月30日
    32
  • 倒立摆起摆控制_旋转倒立摆原理

    倒立摆起摆控制_旋转倒立摆原理**基于STM32控制的旋转倒立摆**文章目录基于STM32控制的旋转倒立摆前言一、旋转倒立摆的结构1.相对编码器与绝对编码器2.相对编码器与绝对编码器的信号采集3.STM32编码器模式4.使用STM32CubeMx配置过程二、倒立摆模型建立三、实验方案与实验现象1.整体方案2.实验现象与上位机数据反思与总结前言近期在学习简易旋转倒立摆装置,倒立摆其实是一个十分经典的自动控制模型,不过开始学习了解结构和原理还是花了很多时间,在思路以及调试过程中遇到了很多困难。我认为倒立摆有两个难点,一个是自动

    2022年8月18日
    18
  • 激活成功教程软件下载网站100个

    激活成功教程软件下载网站100个激活成功教程软件下载网站100个□xuly发表于2005-11-247:48:00

    2022年6月29日
    43
  • ViewStub延迟加载

    ViewStub延迟加载在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码中通过控制View.VISIABLE动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源,虽然把View的初始可见View.GONE但是在Inflate布局…

    2022年6月28日
    24
  • oracle sysdate毫秒,Oracle sysdate常用「建议收藏」

    oracle sysdate毫秒,Oracle sysdate常用「建议收藏」SELECT*FROM(SELECT*FROMcalenderDetailAORDERBYa.calenderdesc)WHERErownum<3;//计算时间大于当前时间的最近2条记录取当前小时,以及相隔一小时v_begin_date:=to_date(to_char(sysdate,‘yyyy-mm-ddhh24‘),‘yyyy-mm-ddhh24‘);…

    2025年8月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号