

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 日志记录最佳实践
<a name="logging-best-practices"></a>

## 日志记录级别
<a name="logging-levels"></a>

注意不要记录过多的数据。日志应捕获有用和可操作的数据。过多的日志记录会对性能产生负面影响，还会增加日志记录的存储和处理成本。过多的日志记录也可能导致问题和安全事件未被检测到。

记录 HTTP 响应状态代码可以生成大量的日志数据，尤其是 200 级（成功）和 300 级（重定向）状态代码。我们建议您考虑仅记录 400 级（客户端错误）和 500 级（服务器端错误）状态代码。

应用程序日志记录框架提供不同级别的日志记录，比如**信息**、**调试**或**错误**。对于开发环境，您可能希望使用详细日志记录（比如包含**信息**和**调试**），来帮助开发人员。但我们建议您对生产环境禁用**信息**和**调试**级别，因为它们可能会生成过多的日志记录数据。

## 注意事项和排除项
<a name="cautions-exclusions"></a>
+ 确保您记录的数据在法律上是允许的，尤其是在您的组织运营所在的司法管辖区。
+ 不要排除来自已知用户（如其他内部系统）、可信第三方、搜索引擎机器人、正常运行时间或进程监控器以及其他远程监控系统的任何事件。但您可以在记录的数据中包含每个类别的分类标志。请注意，应用程序生成的日志文件可能被第三方日志监控解决方案或外部服务提供商等相关方使用，他们无权查看应用程序处理的任何敏感数据。
+ 以下属性不能直接记录在日志中。删除、屏蔽、清理、哈希或加密以下内容：
  + 应用程序源代码
  + 会话标识值（如果需要跟踪特定于会话的事件，可以考虑将其替换为哈希值）
  + 访问令牌
  + 敏感个人数据和某些形式的个人身份信息（PII），比如健康信息或政府颁发的身份信息
  + 身份验证密码
  + 数据库连接字符串
  + 加密密钥和其他主密钥
  + 银行账户或支付卡持卡人数据
  + 允许存储比日志系统安全级别更高的数据
  + 商业敏感信息
  + 在相关司法管辖区非法收集的信息
  + 用户选择不收集或未明确同意收集的信息
  + 同意收集的信息已过期

## 特殊数据类型
<a name="special-data-types"></a>

有时，下列数据也可以记录在日志中。虽然这对调查和排查问题很有用，但也会泄露系统的敏感信息。在记录事件之前，您可能需要对这些数据类型进行匿名化、哈希或加密：
+ 文件路径
+ 内部网络名称和地址
+ 非敏感个人数据，如个人姓名、电话号码和电子邮件地址

如果日志中不需要个人的真实身份，或者认为风险太大，则使用数据匿名化。

## 访问和更改管理
<a name="change-management"></a>
+ 非管理用户不能禁用事件日志记录，尤其是满足合规性要求所必需的事件日志记录。
+ 只有管理用户才能暂停或停止日志记录服务或修改配置。
+ 如果您的日志记录服务具有日志文件完整性验证功能，请启用该功能。这可以帮助您检测日志文件的修改、删除或伪造。有关此功能的更多信息 AWS 服务，请参阅本指南[使用 CloudTrail](cloudtrail.md#using-cloudtrail)中的。
+ 记录更改必须是应用程序固有的，例如，应用程序根据批准的算法自动进行的更改；或遵循批准的更改管理流程进行的更改，例如，更改配置数据或修改源代码时。