【Java后台开发规范】--- 日志的输出

article/2025/10/24 6:43:52

文章目录

  • 前言
    • 其他类型的规范
  • 日志输出
    • 过多日志
    • 重复打印
    • 批量打印
    • 日志中带方法
    • 讲故事
    • 日志跟踪
    • 其他基本要求

前言

做Java开发的,大多数可能都有看过阿里的Java后台开发手册,里面有关于Java后台开发规范的一些内容,基本覆盖了一些通用、普适的规范,但大多数都讲的比较简洁,本文主要会用更多的案例来对一些规范进行解释,以及结合自己的经验做补充!

其他类型的规范

【Java后台开发规范】— 不简单的命名
【Java后台开发规范】— 长函数、长参数
【Java后台开发规范】— 线程与并发
【Java后台开发规范】— 圈复杂度
【Java后台开发规范】— 设计原则
【Java后台开发规范】— Null值处理
【Java后台开发规范】— 异常的处理

日志输出

关于日志方面的规范其实并不多,也没那么重要,毕竟日志打印这个行为很简单,很单纯,阿里开发手册上有两条关于日志的强制性要求,一个是要求日志文件至少保留15天,一个是有关敏感信息、安全等相关记录的,根据国家法律要求至少保留六个月,日志要保留这么长时间,那自然对于日志的管理就很重要,所以很自然的就有对于日志的命名、分类、日期、拆分等就有了一系列的要求,对于这些我们就不过多说明了。

过多日志

有一些人,可能是为了问题排查方便,50行的代码里有一半都是在打印日志,好像已经养成了一种习惯,在任何方面调用前后都要用日志记录一下方法的入参、出参,我们知道打印日志是存在一定的性能消耗的,可能100ms的方法,有50ms都是因为打印日志造成的。其次增加了日志的存储成本。

打印了日志,又抛出了异常,会造成重复打印两次日志。

try{// ...
}catch(Exception e){log.error("xxxx",e);throw new MyException(e);
}

重复打印

add方法调用方和被调用方都打印了相同的内容

public void method() {log.info("方法method执行开始");int a = 1, b = 2;log.info("调用add方法,入参:{},{}", a, b);int c = add(a, b);log.info("add方法返回:{}", c);log.info("方法method执行结束");
}
private int add(int a, int b) {log.info("方法add执行开始,入参:{},{}", a, b);int c = a + b;log.info("add方法返回:{}", c);return c;
}

map打印的时候已经包含了str1 ,str2的内容

public static void methodA() {Map<String, String> map = new HashMap<>();String str1 = "1";String str2 = "2";map.put("a", str1);map.put("b", str2);log.info("str1:{},str2:{}", str1, str2);log.info("map:{}", map);
}

可以合一条打印的,没必要打印三次

public static void methodB() {String str1 = "1";String str2 = "2";String str3 = "3";log.info("str1:{}", str1);log.info("str2:{}", str2);log.info("str3:{}", str3);
}

批量打印

在循环体内打印日志

public static void methodC() {for (int i = 0; i < 100; i++) {log.info("循环内打印日志: " + i);}
}

打印大集合数据

public static void methodD() {int[] arr = new int[1000];Arrays.fill(arr, 1);log.info(Arrays.toString(arr));
}

日志中带方法

不要把map或者对象转成String,直接用toString方法输出即可,JSON转String本身就有一定的性能消耗。

public static void methodE() {Map<String, String> map = new HashMap<>();map.put("a", "1");map.put("b", "2");map.put("c", "3");log.info("没必要把map或者对象通过JSON转成String再打印: {}" , JSON.toJSONString(map));
}

注意不要因为日志输出而引起报错

public static void methodE() {User user = null;log.info("调用user中的任何方法都会出现空指针异常: {}", user.toString());log.info("直接打印user即可: {}", user);
}

讲故事

这个问题典型的表现就是把各种代码逻辑都以日志的形式呈现了出来。

private static void method1(String name) {User user = new User();log.info("把user对象的name设置成:{}", name);user.setName(name);log.info("当name等于小王时,执行methodA,否则执行methodB");if (Objects.equals("小王", name)) {methodA();} else {methodB();}
}

日志跟踪

为了方便日志跟踪,最少给日志配上时间戳、级别、线程名,或者其他能够有效识别的信息。

比如配置上traceId和spanId方便跟踪。

<pattern>%date %level [%X{traceId}/%X{spanId}] [%thread] %logger{10} [%file:%line] %msg%n</pattern>

在这里插入图片描述

线程名XNIO-2一看就知道是web服务undertow开启的。

其他基本要求

1、请按照正确的日志级别进行输出,debug、info、warn、error应该要区分清楚。

2、使用占位符的方式输出日志,占位符比使用String拼接要高效。

3、日志输出尽量使用英文,可以有效的减少日志存储大小,也更加符合国际化标准。

以下两条来自阿里规范中的说明

4、大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。记录日志时请思考:这些日志真的有人看吗?看到这条日志你能做什么?能不能给问题排查带来好处?

5、注意日志输出的级别,error 级别只记录系统逻辑出错、异常或者重要的错误信息。

6、不要直接使用日志系统的(log4j、logback)API,请使用日志框架SLF4J中的API。


http://chatgpt.dhexx.cn/article/stT96Zoe.shtml

相关文章

用IDEA进行Java后台开发(二)

这篇博客接上一篇&#xff0c;用IDEA进行Java后台开发&#xff08;一&#xff09; 上一篇我们已经将工程创建完成了&#xff0c;下面我们将创建一个Servlet&#xff0c;然后本地启动tomcat后调用接口&#xff0c;返回helloWorld&#xff0c;过程如下&#xff1a; 1.在src目录…

Java后台开发入门

转载自: 梦回河口&#xff1a;http://blog.csdn.net/zxc514257857/article/details/71152003 1&#xff0c;什么是Web应用程序 Web应用程序是可以通过Web进行访问的应用程序&#xff0c;最大的好处是访问非常容易。比如淘宝、新浪、网易等门户网站   软件开发领域的三大方向…

Java后台开发:环境搭建

jdkeclipsesvnmavenmysqltomcat7.0sublime安装包和jar插件 配置管理工具-SVN http://download.csdn.net/detail/u013142781/9355417 tomcatPluginV331 http://download.csdn.net/detail/u013142781/9355409 Sublime_Text_2.0.2 http://download.csdn.net/detail/u013142781/…

【Java后台】从零开始的Java后台开发(三)

编写基础的Servlet应用程序 1 Servlet 使用Servlet需要在pom.xml中引入以下依赖&#xff1a; <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.…

【Java后台】从零开始的Java后台开发(一)

1. 工具 tomcat 9.0.65ideal 1. Ideal新建项目 File->New->Project 主要修改如下所示几个地方&#xff0c;之后点击create按钮 创建成功后一开始的目录如下所示&#xff0c; 但先不要动项目&#xff0c;它还在后台下载一些东西&#xff0c;下载完成后&#xff0…

数据迁移,数据库迁移工具,数据库实时同步方案

SyncNavigator是一款功能强大的数据库同步软件&#xff0c;适用于SQL SERVER, MySQL&#xff0c;具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能&#xff0c;支持Windows xp以上所有操作系统&#xff0c;适用于大容量数据库快…

数据迁移常用方法

SQL SERVER几种数据迁移/导出导入的实践 SQLServer提供了多种数据导出导入的工具和方法&#xff0c;在此&#xff0c;分享我实践的经验&#xff08;只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入&#xff09;。 &#xff08;一&#xff09;数据库与E…

电脑数据迁移高招,怎么把旧电脑的数据迁移到新电脑

小编的朋友买了台新的笔记本电脑&#xff0c;方便出差工作&#xff0c;需要将公司电脑上的资料也导一份到新电脑里&#xff0c;怎么把旧电脑的数据迁移到新电脑。朋友一点也不想花时间重新下载安装软件&#xff0c;尤其是那些工作需要的应用。下面是她的一些要求&#xff1a; …

数据迁移ETL工具分享

1.概述 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 我汇总了一些目前市面上比较常用的ETL数据迁移工具&#xff0c;希望对你会有所帮助。 2. …

flyway(数据库迁移工具)

系列文章目录 主要是用来记录每次迭代的版本sql的表结构的变动.在部署某个版本时,能够快找到这个版本对应的sql,避免出现表结构的错误 Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲&#xff0c;Flyway可以像Git管理不同人的代码那样…

在线数据迁移

在线数据迁移&#xff0c;是指将正在提供线上服务的数据&#xff0c;从一个地方迁移到另一个地方&#xff0c;整个迁移过程中要求不停机&#xff0c;服务不受影响。根据数据所处层次&#xff0c;可以分为 cache 迁移和存储迁移&#xff1b;根据数据迁移前后的变化&#xff0c;又…

数据迁移软件|如何将旧电脑的数据传输到新电脑?

小编最近换了台新电脑&#xff0c;需要将旧电脑的文件都转移过去&#xff0c;但是旧电脑上大文件不少&#xff0c;不管是上传到网盘再下载&#xff0c;还是通过QQ或微信在线传输&#xff0c;速度都很慢&#xff0c;且步骤太复杂。相信很多小伙伴也和小编一样遇到过这个问题&…

2023最值得推荐的电脑数据迁移方法,一键转移文件和程序

没有什么比拥有一台新电脑更令人兴奋的了。这意味着您可以使用大量新功能、更强大的功能、更好的显示器和更多存储空间。但是&#xff0c;如果您需要将文件、数据从旧计算机传输到新计算机&#xff0c;或者再新电脑上安装新的程序&#xff0c;那么这种兴奋可能会有所减弱。因为…

各种数据库之间数据迁移工具

前阶段需要把sqlserver上的数据迁移到mysql上&#xff0c;找到了非常好用的工具DB2DB。 下载地址&#xff1a;http://www.szmesoft.com/DB2DB DB2DB 是目前经过测试速度最快、最稳定实现多种数据库之间进行数据转换的工具。支持 SQL Server、MySQL、SQLite、Access 等多种数据…

可视化数据同步迁移工具 CloudCanal

CloudCanal 介绍 CloudCanal 是一款数据迁移同步工具&#xff0c;提供友好的可视化操作界面&#xff0c;支持多种数据源间的数据迁移、数据同步、结构迁移、数据校验。 CloudCanal 核心团队成员来自阿里巴巴中间件和数据库团队, 长期从事分布式数据库、数据库中间件、应用中间…

数据的迁移工具

数据的迁移工具 逻辑导出导入工具&#xff1a;exp ----逻辑导出工具 imp ----逻辑导入工具 数据导出模式&#xff1a; 全库导出 --full 先新建一个用来导出导入的目录 mkdir -p /home/oracle/backup/exp 进入该目录 cd /home/oracle/backup/exp 用语句导出 exp \ s…

电脑数据传输/数据迁移下载哪款软件好?

买了新电脑要重新安装应用程序&#xff1f;旧电脑的数据要迁移到新电脑&#xff1f;文件太多传输速度慢&#xff1f;就没有什么办法是可以一次性解决这些问题的吗&#xff1f;答案当然是有&#xff01;我们可以借助专业的电脑数据传输/数据迁移软件来完成&#xff01;那么究竟数…

数据迁移工具(数据库之间进行数据库迁移所使用的工具及迁移流程。)

总流程图&#xff1a; 以下为mysql&#xff0c;oracle&#xff0c;瀚高&#xff08;highgo&#xff09;&#xff0c;金仓&#xff08;kingbase&#xff09;&#xff0c;达梦&#xff08;DM8&#xff09;数据库之间进行数据库迁移所使用的工具及迁移流程。 1.KingBase Explore…

硬盘数据迁移软件哪款好用?强烈推荐它!

硬盘数据迁移软件哪款好用&#xff1f;现如今&#xff0c;将一块硬盘的数据完整迁移克隆到另一块硬盘已经不是什么技术难题&#xff0c;市面上形形色色的硬盘数据迁移软件也不少&#xff0c;但是到底哪款好用呢&#xff1f;小编在试过多款硬盘数据迁移软件之后&#xff0c;综合…

8款数据迁移工具选型,主流且实用

前言&#xff1a;ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。今天特地给大家汇总了一些目前市面上比较常用的ETL数据迁移工具&#xff0c;希望对…