首页 > 其他分享 >阿里日志规约

阿里日志规约

时间:2023-09-13 09:56:14浏览次数:39  
标签:输出 logger log 规约 阿里 debug 日志 强制

  1. 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架
    (SLF4J、JCL–Jakarta Commons Logging)中的 API,使用门面模式的日志框架,有利于维护和
    各个类的日志处理方式统一。
    说明:日志框架(SLF4J、JCL–Jakarta Commons Logging)的使用方式(推荐使用 SLF4J)
    使用 SLF4J:
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    private static final Logger logger = LoggerFactory.getLogger(Test.class);
    使用 JCL:
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    private static final Log log = LogFactory.getLog(Test.class);

  2. 【强制】所有日志文件至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。对于
    当天日志,以“应用名.log”来保存,保存在/home/admin/应用名/logs/目录下,
    过往日志格式为: {logname}.log.{保存日期},日期格式:yyyy-MM-dd
    说明:以 mppserver 应用为例,日志保存在/home/admin/mppserver/logs/mppserver.log,历史日志
    名称为 mppserver.log.2016-08-01

  3. 【强制】应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:
    appName_logType_logName.log。logType:日志类型,如 stats/monitor/access 等;logName:日志描

  4. 【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。
    说明:因为 String 字符串的拼接会使用 StringBuilder 的 append()方式,有一定的性能损耗。使用占位符仅
    是替换动作,可以有效提升性能。
    正例:logger.debug(“Processing trade with id: {} and symbol: {}”, id, symbol);

  5. 【强制】对于 trace/debug/info 级别的日志输出,必须进行日志级别的开关判断。
    说明:虽然在 debug(参数)的方法体内第一行代码 isDisabled(Level.DEBUG_INT)为真时(Slf4j 的常见实现
    Log4j 和 Logback),就直接 return,但是参数可能会进行字符串拼接运算。此外,如果 debug(getName())
    这种参数内有 getName()方法调用,无谓浪费方法调用的开销。
    正例:

// 如果判断为真,那么可以输出 trace 和 debug 级别的日志
if (logger.isDebugEnabled()) {
logger.debug(“Current ID is: {} and name is: {}”, id, getName());
}
  1. 【强制】避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。
    正例:

  2. 【强制】生产环境禁止直接使用 System.out 或 System.err 输出日志或使用
    e.printStackTrace()打印异常堆栈。
    说明:标准日志输出与标准错误输出文件每次 Jboss 重启时才滚动,如果大量输出送往这两个文件,容易
    造成文件大小超过操作系统大小限制。
    public void printStackTrace() {
    printStackTrace(System.err);
    }
    它其实也是利用 System.err 输出到了 tomcat 控制台。

  3. 【强制】异常信息应该包括两类信息:案发现场信息和异常堆栈信息。如果不处理,那么通过
    关键字 throws 往上抛出。
    正例:logger.error(各类参数或者对象 toString() + “_” + e.getMessage(), e);

  4. 【强制】日志打印时禁止直接用 JSON 工具将对象转换成 String。
    说明:如果对象里某些 get 方法被重写,存在抛出异常的情况,则可能会因为打印日志而影响正常业务流
    程的执行。
    正例:打印日志时仅打印出业务相关属性值或者调用其对象的 toString()方法。

  5. 【推荐】谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用
    warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑
    爆,并记得及时删除这些观察日志。

标签:输出,logger,log,规约,阿里,debug,日志,强制
From: https://www.cnblogs.com/hasome/p/17698729.html

相关文章

  • win11查看系统日志详细流程(附图片)
    详细流程如下所示:``打开控制面板。搜索时间查看器(EventView),点击进入查看事件日志。进入事件查看器,选择系统日志。日志界面信息如下图,包括系统全部运行日志基本信息以及详细信息。如需筛选日志类型,可点击筛选当前日志(filterlogs)。输入任务ID或者类型等信息进行......
  • 123.jpg 蓝牛相片摄影时间更改助手是一款绿色免费的照片批量修改摄影日期时间,让您的相
     蓝牛相片摄影时间更改助手是一款绿色免费的照片批量修改摄影日期时间,让您的相片一目发然相片摄影时间 软件全自动一键操作,再也不必一个一个手动修改了更新日志:2023年9月12日V2.00 支持自定义图片类型 升级核心代码2023.04.25V1.50优化代码提高速度修复BUG 本地......
  • 怒赞了,阿里P8面试官推荐的Java高并发核心编程文档
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • WebRTC rtc::FileRotatingLogSink日志使用
    前言WebRTC默认日志打印到控制台,如果需要打印到文件或网络,需要自己继承并实现LogSink这个类的接口。即在OnLogMessage函数里面完成日志的输出(写磁盘文件,写网络socket等)。庆幸的是webrtc中的FileRotatingLogSink类帮助我们实现日志写入磁盘文件,并且FileRotatingLogSink能控制文件......
  • glog 日志库简介与测试【GO 常用的库】
    〇、前言golang/glog是C++版本google/glog的Go版本实现,基本实现了原生glog的日志格式。在Kuberntes中,glog是默认日志库。因此需要详细了解下。下面列举下glog的特点:高效性:glog采用了异步写入日志的方式,这意味着日志记录操作不会阻塞主程序的执行。它还使用了缓......
  • logback日志压缩配置
     <configuration><!--RollingFileAppender继承自FileAppender,具有轮转日志文件的功能,是我们最常使用的Appender--><appendername="ROLLING"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--支持多个JVM同时写一个文件......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    来源:https://aijishu.com/a/1060000000097166官方镜像地址: https://hub.docker.com/_/mong...docker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMap......
  • 单一子群规约
    一个比较初级的整理,本篇中我们主要考虑两个问题.生成子群问题对于某一族群\(G\),给定一个子集\(S\subsetG\),问生成的子群\(\langleS\rangle\)的如下信息:给定\(g\inG\),判定\(g\in\langleS\rangle\)?计算生成子群的大小\(|\langleS\rangle|\)?...如果......
  • Golang日志新选择:slog
    go1.21中,slog这一被Go语言团队精心设计的结构化日志包正式落地,本文将带领读者上手slog,体会其与传统log的差异。WHY在日志处理上,我们从前使用的log包缺乏结构化的输出,导致信息呈现出来的样子并非最适合人类阅读,而slog是一种结构化的日志,它可以用键值对的形式将我们需要的信息呈现......
  • 日志是你的朋友:为什么每个开发者都应该写日志
    大家好,我是小米,一个热衷于技术分享的程序员。今天我想和大家聊一聊一个在编写代码时常常被忽视,却极为重要的话题——为什么要写有意义的日志。在日常的编程工作中,我们经常听到“日志”这个词,但是有些人可能并不理解为什么要在代码中写入日志,或者觉得这只是一种不必要的繁琐。但是,当......