日志分级.md

概述

在开发和运维过程中,日志是定位问题、监控系统状态的重要工具。合理使用日志分级机制,可以帮助开发者和运维人员在生产环境出现故障时,通过动态调整日志级别获得更多的调试信息,而不需要修改代码或重新部署服务。这种灵活性对于提高系统稳定性和快速问题排查非常关键。

适用场景

  1. 动态问题定位
    通过调整日志级别在生产环境中获取更多调试信息,用于快速排查故障。

  2. 系统运行状态监控
    在正常运行时仅记录关键日志,在发生问题时提升日志级别,记录更多细节。

  3. 开发与运维分工
    在开发阶段可以记录详细日志,而在生产阶段保持日志简洁,避免性能开销。

  4. 敏感系统问题追踪
    在高负载、复杂环境中,通过细化日志级别进行逐步排查。

实例

日志分级打印

  • DEBUG:
    用于记录详细的调试信息,例如变量值、逻辑路径等。适合在生产环境中临时开启以获得更多调试信息。

  • INFO:
    用于记录程序的正常运行状态,例如关键业务流程的完成情况或配置信息。

  • WARNING:
    用于记录可能存在问题的情况,例如资源不足或配置异常但尚未影响程序运行的事件。

  • ERROR:
    用于记录程序中出现的错误或异常,例如外部服务连接失败、无法解析用户输入等。

  • CRITICAL/FATAL:
    用于记录严重的错误或紧急情况,例如系统无法继续运行的致命问题。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import logging

# 配置日志
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler("app.log"), # 日志输出到文件
logging.StreamHandler() # 日志同时输出到控制台
]
)

# 示例日志打印
logging.debug("This is a debug message.")
logging.info("This is an info message.")
logging.warning("This is a warning message.")
logging.error("This is an error message.")
logging.critical("This is a critical message.")

限制日志文件大小和数量

通过 RotatingFileHandler 限制日志文件的大小和数量,防止日志无限增长占用磁盘空间。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from logging.handlers import RotatingFileHandler

# 配置日志
handler = RotatingFileHandler(
"app.log", maxBytes=5 * 1024 * 1024, backupCount=3 # 每个文件最大5MB,最多保留3个文件
)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

logger = logging.getLogger("my_logger")
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

# 示例日志打印
logger.debug("This is a debug message.")
logger.error("This is an error message.")

避免敏感信息泄露

在打印日志时,需避免直接输出用户密码、密钥或其他敏感信息。如果确实需要记录,可以对敏感信息进行脱敏处理。

示例代码:

1
2
3
4
5
def log_user_info(user_id, email):
logging.info("Logging user info: user_id=%s, email=%s", user_id, email.split('@')[0] + "@***")

# 示例调用
log_user_info("12345", "user@example.com")

支持动态调整日志级别(可选)

通过 logger.SetLogger 动态调整日志级别,这样可以在生产出现事故时,可以无需重启便可获取关键值。

注意点

  1. 日志级别合理划分
    根据内容重要性选择合适的日志级别,避免日志泛滥。

  2. 日志文件管理

    • 限制日志文件大小和数量,防止占用过多磁盘空间。
    • 定期归档或清理旧日志。
  3. 敏感信息保护

    • 不记录明文密码、密钥等敏感信息。
    • 使用脱敏或加密技术处理敏感数据。
  4. 性能优化

    • 避免在高并发或频繁调用中记录过多日志。
    • 使用异步日志工具(如 loguru 或第三方日志管理系统)处理高吞吐量日志。

日志分级.md
https://abrance.github.io/2024/11/22/mdstorage/domain/开发技巧/日志分级/
Author
xiaoy
Posted on
November 22, 2024
Licensed under