什么时候记录日志
记录日志并没有标准的规范,通常是需要开发人员根据业务和代码来自行判断。日志的记录需涵盖多个方面,旨在提高系统的可维护性、可追溯性和故障排查的效率等操作。
常规事件记录
- 进行了哪些操作;
- 发生了与预期不符的情况;
- 运行期间出现了未能处理的异常或警告等等...
必要性事件记录
1. 记录第三方系统调用
在调用第三方系统时,记录 API 的 URL
、Request/Response Body
和异常,是一个极具价值的实践操作。这种记录方式有以下优势:
- 明确故障原因: 在发生故障时,清晰的日志报告可以帮助定位问题,减少不同系统服务运维人员之间的责任界定,有助于协同解决问题。
- 问题追踪: 追踪请求和响应的详细信息有助于后续的问题调查和系统行为分析。
2. 记录核心业务的关键代码和分支
在核心业务的关键代码和分支加上日志是一个极具意义的操作。这种方式的好处包括:
- 状态遍历: 可以清晰地了解程序是否根据当前状态遍历了预期路径,有助于理解程序的执行逻辑。
- 问题排查: 在核心业务发生问题时,有详细的日志记录可以提供关键线索,加速故障排查的过程。
3. 记录核心业务的审计日志
对于和法律或合同具有关联性的核心业务,加上审计日志是非常必要的实践。相关优势包括:
- 合规性: 符合法规和合同的要求,确保系统操作的合法性和透明度。
- 责任追踪: 提供了对核心业务操作的历史记录,可以追踪操作的责任人和时间。
4. 记录应用服务启动时的配置信息
在应用服务启动时输出配置信息,有助于:
- 系统初始化: 提供了系统初始化配置的记录,方便追踪系统启动时的配置状态。
- 问题定位: 在配置问题发生时,可以快速查看系统启动时的配置信息,有助于问题定位。
这些建议强调了在关键业务领域和与外部系统交互的地方进行详细的日志记录,为系统的可维护性和问题排查提供了强有力的支持。
记录哪些日志
记录日志中的各种信息或元数据,它们提供了关于日志事件、状态和环境的额外上下文。这些日志信息的存在使得日志更加具体和可追溯,有助于在分析和排查问题时提供更多的上下文信息。在实际应用中,具体的日志属性可能会根据系统需求和开发团队的规范而有所不同。
基础版本
日志内容包括时间戳、线程名、日志级别、类名、方法名、自定义属性、异常信息
等,提供了详细的上下文信息。
所以一个合格的日志应该至少包含这些信息。
高级版本
时间戳(Timestamp)
- 描述: 记录日志事件发生的精确时间。
- 示例:
2023-01-10 14:30:00.123
日志级别(Log Level)
- 描述: 表示日志的严重程度,如DEBUG、INFO、WARN、ERROR等。
- 示例:
INFO
Logger 名称(Logger Name)
- 描述: 标识记录日志的具体 Logger 或 Logger 类别。
- 示例:
com.example.MyClass
线程名(Thread Name)
- 描述: 记录生成日志的线程的名称。
- 示例:
Thread-1
类名(Class Name)
- 描述: 记录生成日志的类的名称。
- 示例:
com.example.MyClass
方法名(Method Name)
- 描述: 记录生成日志的方法的名称。
- 示例:
performAction
文件名(File Name)
- 描述: 记录生成日志的源代码文件的名称。
- 示例:
MyClass.java
行号(Line Number)
- 描述: 记录生成日志的源代码文件的行号。
- 示例:
42
异常信息(Exception Information)
- 描述: 记录与日志事件相关联的异常信息。
- 示例:
java.lang.NullPointerException: Null value encountered
用户标识(User Identity)
- 描述: 记录与日志事件相关的用户身份信息。
- 示例:
user123
请求标识(Request Identity)
- 描述: 记录与日志事件相关的请求或事务标识。
- 示例:
RequestID: 12345
自定义属性(Custom Properties)
- 描述: 可以根据业务需求添加的自定义属性,提供额外的业务上下文。
- 示例:
transactionType: Payment
日志安全
确保日志的安全性是关键,以防止恶意攻击和保护敏感信息。
信息安全 (PII)
避免打印或记录任何敏感信息,包括但不限于各种PII,PCI信息,一定要记得遵守当地的各种法律法规,如《个人信息保护法》(PILI),欧洲的一般数据保护条例GDPR等...
访问控制
限制对日志文件和日志系统的访问权限。只有授权的人员应该能够查看和修改日志。使用操作系统和日志框架提供的访问控制机制来实现这一点。
加密传输
当将日志传输到远程服务器或中心化日志系统时,使用加密传输协议,如TLS/SSL,以确保数据在传输过程中的安全性。
脱敏和加密
在记录日志时,对于包含敏感信息的字段,使用脱敏或加密技术。确保在日志中不明文存储密码、密钥或其他敏感数据。
审计和监控
配置日志系统以记录对日志的访问和修改事件。监控和审计日志系统的访问,及时检测潜在的不当行为。
保留和删除策略
制定并遵循日志保留和删除策略,以确保不仅符合合规性要求,而且减少不必要的数据存储。定期清理过期的日志数据。
合规性需求
确保日志系统符合适用的法规和合规性标准,如GDPR、HIPAA等。合规性是保护用户隐私和遵守法规的关键要素。
定期审查
定期审查日志系统的配置和记录,确保符合安全最佳实践和公司政策。及时纠正任何潜在的安全问题。
安全日志记录
记录有关日志系统自身安全性的信息,包括登录尝试、配置更改等。这有助于监控日志系统的整体安全性。
备份和恢复
定期备份日志数据,并测试数据恢复过程。确保在灾难发生时,能够迅速且完整地恢复日志数据。
安全开发实践
在开发过程中,采用安全的编码实践,防止因为日志记录导致的安全漏洞,如日志注入攻击。