【项目实战】关于日志,你需要了解这些
创始人
2024-05-31 21:38:44
0

一、日志框架介绍

1.1 Slf4j介绍

SLF4J 是门面模式的日志框架,有利于维护和各个类的日志处理方式统一,并且可以在保证不修改代码的情况下,很方便的实现底层日志框架的更换。
不能直接使用日志系统(Log4j、Logback)中的 API

1.2 Logger 介绍

Logger 是一种记录应用程序运行时信息的工具,它可以记录应用程序的运行状态、错误信息、调试信息等。通过使用 Logger,开发人员可以更方便地进行应用程序的调试和故障排除。Logger 可以将记录的信息输出到控制台、文件、数据库等不同的目标中,以便开发人员进行查看和分析。Logger 还可以根据不同的日志级别进行过滤,以便开发人员只关注自己关心的信息。

1.3 Logback介绍

Logback是一个开源的日志框架,它是log4j框架的改进版,具有更高的性能和更好的可扩展性。Logback支持多种日志级别、多种输出格式、多种输出目的地,可以很方便地集成到各种Java应用程序中。Logback还提供了丰富的配置选项,可以通过配置文件或编程方式进行配置。

1.4 Log4j介绍

1.5 Logstash介绍

Logstash是一个开源的数据收集引擎,它可以从不同的数据源中收集、处理和转换数据,然后将数据发送到各种目标,如Elasticsearch、Kafka、Amazon S3等。Logstash支持多种输入和输出插件,可以轻松地与各种数据源和目标进行集成。它还提供了强大的过滤器插件,可以对数据进行实时处理和转换。Logstash是ELK Stack中的一部分,与Elasticsearch和Kibana一起构成了一个完整的日志分析解决方案。

  • Logstash主要用于收集数据,并将数据保存到ElasticSearch中。
  • Logstash有丰富插件,并且易于扩展,所以,可以使用Logstash收集到数据后,可以做很多处理,最终再将数据输出到ElasticSearch中。在日志平台中,它主要复杂采集应用的日志。

二、日志输出时间(何时输出)

2.1 系统初始化:

系统启动参数、环境变量

2.2 预期外的错误:

异常发生时,要有详尽记录,并通知相关人员介入处理,第一时间作出响应,因为这种错误已经影响系统的正常使用

2.3 可预期的异常:

这类异常应该有效记录起来,通过警告方式反馈给相关人员加以关注,避免频繁发生,最终演化为不可控的错误。

2.4 关键操作:

增删改

2.5 函数:

函数出入口,重点关注入口

2.6 核心业务操作:

核心或者逻辑复杂的代码,建议添加详细的注释,以及较详细的日志。

2.7 流程分支:

在关键代码流程分支上打印日志。

2.8 调用外部接口:

在调用外部接口的时候,需要打印请求参数、响应值相关信息。

三、日志级别

3.1 error:错误日志

  • 指比较严重的错误,对正常业务有影响,需要运维配置监控的;
  • 该级别的错误也需要马上被处理,但是紧急程度要低于fatal级别。
  • error应该尽量详细记录。

3.2 warn:警告日志

  • 一般的错误,对业务影响不大,但是需要开发关注;
  • 该级别日志表示系统可能出现问题,也可能没有。
  • 可以使用 warn 日志级别来记录用户输入参数错误的情况

3.3 info:信息日志

  • 记录排查问题的关键信息,如调用时间、出参入参等等;
  • 该级别日志记录系统的正常运行状态,通过查看info级别的日志,可以很快地对系统中出现的 warn,error,fatal错误进行定位。
  • 可以将初始化系统配置、业务状态变化信息,或者用户业务流程中的核心处理记录到info日志中,方便日常运维工作以及错误回溯时上下文场景复现。

3.4 debug:调试日志

  • 用于开发DEBUG的,关键逻辑里面的运行时数据;
  • 该级别日志的主要作用是对系统每一步的运行状态进行精确的记录。
  • 可以将各类详细信息记录到DEBUG里,起到调试的作用,包括参数信息、调试细节信息、返回值信息等

四、日志内容

4.1 推荐使用英文内容

推荐输出英文日志内容,作用如下:

  1. 避免出现日志乱码;
  2. 使用ELK查询日志更方便

4.2 参数占位,唯一标识在前

  1. 禁止使用+操作符进行字符串的拼接,因为有一定的性能损耗,建议使用{}占位符;
  2. 建议将唯一标识放在日志内容前,如:userId、VIN、SN、deviceId等唯一标识,有利于快速定位log

4.3 异常打印




%d{yyyy-MM-dd HH:mm:ss.SSS} [${project.name}-${app.name}]
[%thread]%-5level %logger - %msg%n



import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger =LoggerFactory.getLogger(Person.class);
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Person {}
log.info("{}:Processing trade with , symbol : {} ", id, symbol);
log.info("{}:loginOrLogoutLogList param={}", userId, param);

4.4 禁止做这些

4.4.1 禁止使用e.printStackTrace();

try {// 业务代码处理
} catch (Exception e) {e.printStackTrace(); //不要使用e.printStackTrace();
}

4.4.2 异常日志不要只打印一半;

try {//业务代码处理
} catch (Exception e) {// 错误LOG.error('你的程序有异常啦', e.getMessage()); //异常日志不要只打印一半;
}

4.4.3 不要只是一句错误提示;

try {//业务代码处理
} catch (Exception e) {// 错误LOG.error('你的程序有异常啦'); //不要只是一句错误提示;
}try {// 业务代码处理
} catch (Exception e) {log.error("Person study errer,param={},e={}", param, e);
}

4.4.4 不要既打印日志,又抛出异常

try {//业务代码处理
} catch (Exception e) {// 错误LOG.error('你的程序有异常啦'); //不要只是一句错误提示;throw .new Exception("异常信息");
}

4.4.5 重复日志

避免重复打印日志,会浪费磁盘空间。
如有一行日志清楚表达了意思,避免再冗余打印;

if (user.isVip()) {log.info("该用户是会员,Id:{}", user, getUserId());//冗余,可以跟前面的日志合并一起log.info("开始处理会员逻辑,id:{}", user, getUserId());//会员逻辑
} else {//非会员逻辑
}

4.6 禁止输出的信息

  1. 禁止在日志中输出一些敏感信息,
    例如用户密码,身份证、手机号、银行卡、姓名、住址、邮箱等
    如需要可以考虑掩码脱敏,以及要保持编码的一致
  2. 禁止使用System.out.println(“xxxxxxx”)语句;
  3. 禁止使用e.printStackTrace();
  4. 禁止无意义打印,如连续的等号、星号或数字:***、=======、-------等
  5. 禁止循环打印Log
  6. 避免打印过长的日志内容:如列表、大json、大对象、数据库内容、天气详细信息、新闻列表等

五、日志格式

日志应当包括基本的信息:如

  • 当前时间戳(一般毫秒精确度)
  • 日志级别
  • 线程名字

六、日志脱敏方案

日志里的敏感信息还在打明文?3 种日志脱敏方案任你选
https://blog.csdn.net/JiuQianWan/article/details/127020281

相关内容

热门资讯

Home家英语作文【推荐6篇... Home家英语作文 篇一My Ideal HomeEveryone has their own id...
有志者事竟成英语作文60字(... 篇一:有志者事竟成The First Article: Nothing is Impossible ...
我想当一名厨师英语作文(最新... 我想当一名厨师英语作文 篇一Title: My Dream of Becoming a ChefIn...
我最喜欢的动物英语作文60词 我最喜欢的动物英语作文60词(通用17篇)  在日复一日的学习、工作或生活中,大家都有写作文的经历,...
小王子英文读后感(经典5篇) 小王子英文读后感 篇一"The Little Prince" is a captivating st...
环境的英语作文 -英语作文【... 环境的英语作文 - 第一篇Title: The Importance of Environmenta...
英语作业个人简介范文【精选6... 英语作业个人简介范文 篇一My name is Emily, and I am a 17-year-...
考研英语作文之妈妈讲过去(经... 考研英语作文之妈妈讲过去 篇一:妈妈的成长历程妈妈是我最亲近的人,她的成长历程一直都是我心中的榜样。...
以诚实为话题的英语作文(精简... 以诚实为话题的英语作文 篇一Honesty is the Best PolicyIn today's...
旅游的英语作文(推荐5篇) 旅游的英语作文 篇一:我的梦想之旅Traveling is one of my favorite a...
人物英语作文:我最爱的人Th... 人物英语作文:我最爱的人 The Person I Love The Most篇一:我的父亲 My ...
英语作文写信格式及范文(精简... 英语作文写信格式及范文 篇一Dear [Recipient's Name],I hope this ...
我的母校英语作文(经典6篇) 我的母校英语作文 篇一:美丽的母校我深爱着我的母校,这个给予我无数美好回忆和教育的地方。它位于一个宁...
介绍蜘蛛的英语作文(优选3篇... Introduction to SpidersEssay OneSpiders are fascin...
万圣节的英语作文【优秀6篇】 万圣节的英语作文 篇一Halloween: A Night of Fun and FrightHal...
我的英语老师-老师的作文60... 我的英语老师-老师的作文600字 篇一我的英语老师我非常幸运地遇到了一位优秀的英语老师,她是我人生中...
高中英语作文(经典6篇) 高中英语作文 篇一:如何提高英语口语能力英语是一门国际通用语言,具备良好的英语口语能力对于我们的学习...
学英语作文【实用6篇】 学英语作文 篇一如何提高英语口语能力英语口语是学习英语的重要组成部分,也是很多人学习英语的目标之一。...
植树节的英语作文【推荐6篇】 植树节的英语作文 篇一The Importance of Tree-Planting on Arbo...
网络的利与弊英语作文 关于网络的利与弊英语作文  在日常学习、工作和生活中,说到作文,大家肯定都不陌生吧,作文是人们把记忆...