您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java 日志记录—记录什么和不记录什么?

时间:2022-01-26 09:22:20  来源:  作者:粤嵌教育

日志是发现错误和调试代码的便捷工具。除了日志的功能方面,从 JAVA 安全的角度来看,日志也很重要, 当发生安全漏洞时,你的日志文件是寻找所发生事件线索的第一个位置。

 

日志的质量至关重要。从 Java 安全的角度来看,记录太多或太少的信息都可能是灾难性的。 在本文中,我将引导你通过一种实用的 Java 日志记录方法——我们应该记录什么,我们不应该记录什么。

 

我们应该记录什么?

 

这是谁干的?识别发出此请求的用户或系统。如果可能,使用用户 ID 和 IP 地址。

 

到底是怎么回事?这是什么日志语句。许多开发人员已经认识到不同的日志级别来注释消息的重要性(ERROR、WARN、INFO、DEBUG、TRACE)。区分功能日志记录、安全日志记录,甚至审计日志记录(如果适用)是明智的。

 

在哪发生的?确定位置。你通常为每个类定义一个记录器,所以这已经是一个好的开始。但是,我们也需要知道具体的方法。此外,我们想知道特定的节点,例如,如果你正在使用微服务架构

 

它是什么时候发生的?时间是必不可少的,因此请确保记录时间戳。请注意时区差异,更重要的是,每年更改两次时区。我的建议是始终以 UTC 输出,所以每个人都很清楚。

 

为什么会这样? “为什么”通常是你需要找出的。你不能总是在一条日志中捕捉到这一点。在某些情况下,这是显而易见的。如果是这样,请将其作为消息的一部分。很多时候,只有看到日志之间的关系,我们才能解释“为什么”。因此,请确保你的日志消息绝对清晰。

 

这是怎么发生的?就像“为什么”一样,“如何”通常不能在一个陈述中被抓住。因此,消息之间的关联,尤其是在基于服务的架构中,是极其重要的。为此,你应该为每个具有出站接口的服务中的每个传入请求创建一个唯一的关联 ID。获得此 ID 后,应将其记录在每个语句中。如果你需要将此 ID 传输到另一个服务,你可以使用特定的 HTTP 标头 X-Correlation-ID 来关联并保持无状态。

 

Java 日志记录—记录什么和不记录什么?

我们不应该记录什么?

 

记录太多信息与记录太少一样有害。你不希望你的日志被在生产中无用的信息淹没。因此,应始终将生产系统上的日志级别设置为合适的级别,例如 WARN 或 ERROR。

 

作为开发的一部分,工程师将记录可能包含个人数据的敏感实体,以便调试应用程序。尽管我们应该致力于防止这种情况发生,但内部调试消息应该具有适当的日志级别——例如,DEBUG 或 TRACE——并且不应该在生产环境中可见。

 

作为一般规则,应用程序不应泄露任何特定于应用程序或特定于用户的数据——攻击者可以使用这些数据。此外,通过暴露个人信息,你很可能不符合隐私法规。即使只有内部人员可以访问日志,这也是单点故障。因此,我们根本不希望这些信息落入坏人之手。

 

开发时,请考虑你需要记录的内容。我们是否需要记录内部 ID、未加密密码或某人的信用卡详细信息?注意不要在 Java 中输出完整的数据对象,因为输出取决于该特定对象的 toString() 方法。

 

通过记录个人信息以进行调试,我们规避了我们自己的许多安全策略——不完全记录这些类型的信息是明智的。如果我们需要记录特定数据,请确保设置正确的日志级别,例如 DEBUG。你还应该将生产系统的日志级别设置为更高的级别,例如 WARN。

 

日志记录不是你只需要做的事情。 仔细查看你记录的内容、记录时间和使用日志,对于进行快速研究或干预至关重要。尽管预防胜于治疗,但总有可能有人破坏了你的系统,而你希望防止进一步的损害。



Tags:Java 日志   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
日志是发现错误和调试代码的便捷工具。除了日志的功能方面,从 Java 安全的角度来看,日志也很重要, 当发生安全漏洞时,你的日志文件是寻找所发生事件线索的第一个位置。 日志的质...【详细内容】
2022-01-26  Tags: Java 日志  点击:(2)  评论:(0)  加入收藏
Java 有很多的日志框架可以选择,当同一个项目中出现多种日志框架时就很容易出现日志框架冲突的问题,导致日志打印不出来。本文将以一次典型的日志冲突排查问题为例,提供排查步骤和思路,最后分析日志框架冲突的原因。...【详细内容】
2020-01-17  Tags: Java 日志  点击:(62)  评论:(0)  加入收藏
▌简易百科推荐
日志是发现错误和调试代码的便捷工具。除了日志的功能方面,从 Java 安全的角度来看,日志也很重要, 当发生安全漏洞时,你的日志文件是寻找所发生事件线索的第一个位置。 日志的质...【详细内容】
2022-01-26  粤嵌教育    Tags:Java 日志   点击:(2)  评论:(0)  加入收藏
和软件的MACD的值进行对比过,数值是一样的,不过我这个版本小数点后面更精确,软件的是四舍五入的。这个版本支持增量更新,更加方便。使用需要单例模式,如果多并发请自行修改代码。...【详细内容】
2022-01-20  吴彬的分享    Tags:JAVA   点击:(9)  评论:(0)  加入收藏
1、阿里云DNS的SDK依赖<dependency> <groupId>com.aliyun</groupId> <artifactId>tea-openapi</artifactId> <version>0.0.19</version></dependency><dependency> <groupId...【详细内容】
2022-01-19  顶顶架构师    Tags:阿里云DNS   点击:(9)  评论:(0)  加入收藏
Maven是Java的项目配置管理工具,用来管理依赖,具体的用途就不展开说了。大部分项目,配置一个镜像仓库地址就可以了(单个mirror)。但是有的网上下载的项目需要从多个仓库查找对应...【详细内容】
2022-01-14  阿福ChrisYuan    Tags:Maven配置   点击:(15)  评论:(0)  加入收藏
闰年闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1月~12月分别为31天、29天、31天、...【详细内容】
2022-01-11  3班的黄同学    Tags:   点击:(15)  评论:(0)  加入收藏
目录4、TCP网络传输的基本流程二、网络编程套接字(socket)5、cookie和session的用法6、基本实现http协议的代码四、传输层协议TCP和UDP4、TCP和UDP之间的对比六、数据链路层和...【详细内容】
2022-01-04  顶顶架构师    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(22)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(43)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(34)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(33)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条