当前位置: 首页 > news >正文

24. 日志的基本实现方式

Python日志系统实战:从配置到验证的全流程解析

一、代码结构解析

1.1 核心配置参数

LOG_FORMATTER = ('%(asctime)s - %(name)s - %(levelname)s - %(status)s - %(message)s','%H:%M:%S')  # ⚠️注意:自定义字段需要特殊处理
LOG_NAME = r'demo_log'
LOG_FILE = r'./demo.log'
LOG_LEVEL = logging.DEBUG
参数名称推荐配置注意事项
LOG_FORMATTER包含时间/名称/级别需处理自定义字段
LOG_FILE绝对路径更安全注意文件权限问题

1.2 函数实现解析

def creat_logger(...):  # ⚠️拼写建议:create_logger"""..."""formatter = logging.Formatter(*log_formatter)  # ✅正确展开格式元组handler = logging.FileHandler(log_file)       # ⚠️建议添加文件模式参数handler.setFormatter(formatter)logger = logging.getLogger(log_name)logger.setLevel(log_level)                   # ✅正确设置日志层级logger.addHandler(handler)return logger

二、测试验证流程

2.1 基础测试用例

# 正常日志测试
log.debug("系统启动", extra={"status": "OK"})
log.info("用户登录", extra={"status": "SUCCESS"})# 异常场景测试
try:1/0
except Exception as e:log.error("计算错误", exc_info=True, extra={"status": "FAILURE"})

2.2 预期输出示例

15:30:45 - demo_log - DEBUG - OK - 系统启动
15:30:45 - demo_log - INFO - SUCCESS - 用户登录
15:30:45 - demo_log - ERROR - FAILURE - 计算错误
Traceback (most recent call last):File "<stdin>", line 2, in <module>
ZeroDivisionError: division by zero

三、关键问题说明

3.1 注意事项

  1. 自定义字段处理status字段需要配合Filter使用
    class StatusFilter(logging.Filter):def filter(self, record):record.status = getattr(record, 'status', 'UNKNOWN')return True
    
  2. 路径安全问题:建议使用绝对路径
    import os
    LOG_FILE = os.path.abspath('./demo.log')
    

3.2 改进建议

# 改进后的Handler配置
handler = logging.FileHandler(log_file, mode='a',       # 明确写入模式encoding='utf-8' # 指定编码格式
)

四、完整执行流程

  1. 保存代码为 logger_demo.py
  2. 创建测试脚本:
    from logger_demo import log
    # 执行2.1的测试用例
    
  3. 验证输出文件:
    tail -f demo.log  # Linux
    Get-Content demo.log -Wait  # PowerShell
    

五、完整代码

"""
Python :3.13.3
Selenium: 4.31.0lgos.py
"""import loggingLOG_FORMATTER = ('%(asctime)s - %(name)s - %(levelname)s - %(status)s - %(message)s','%H:%M:%S')LOG_NAME = r'demo_log'
LOG_FILE = r'./demo.log'
LOG_LEVEL = logging.DEBUGdef creat_logger(log_name: str = LOG_NAME,log_file: str = LOG_FILE,log_level: int = LOG_LEVEL,log_formatter: tuple = LOG_FORMATTER):"""日志配置和生成器:param log_name: 日志名称:param log_file: 日志文件的路径:param log_level: 日志等级:param log_formatter: 日志的格式:return:"""formatter = logging.Formatter(*log_formatter)handler = logging.FileHandler(log_file)handler.setFormatter(formatter)logger = logging.getLogger(log_name)logger.setLevel(log_level)logger.addHandler(handler)return loggerlog = creat_logger()

「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

相关文章:

  • 第十天的尝试
  • Gateway全局过滤器:接口耗时统计与黑白名单配置
  • Linux环境变量与地址空间
  • maxkey单点登录系统
  • LeetCode-贪心-买卖股票的最佳时机
  • SOC-ESP32S3部分:11-任务创建
  • 基于亚博K210开发板——lvgl 图形化实验
  • ubuntu ollama /Dify/Docker部署大模型
  • 刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答
  • 多态的总结
  • 【C语言】习题练手套餐 2
  • 在WPF程序中设置背景图片
  • 深度解析NL2SQL:从语义理解到工程实践的全链路探索
  • 向量数据库Milvus03-高级功能与性能调优
  • 探索产品经理的MVP:从概念到实践
  • AVL树简介与部分实现
  • 基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统
  • Microsoft.ClearScript.V8单例模式封装,方便下次使用。
  • web常见的攻击方式有哪些?如何防御?
  • JVM学习(四)--对象内存布局
  • 一站式做网站开发/网络推广运营是做什么
  • 网站建设面对的问题/宁波seo哪家好快速推广
  • 不会技术怎么做公司网站/店面怎么做位置定位
  • 个人承接网站建设/长尾关键词挖掘站长工具
  • 前端网站建设和维护/seo推广有哪些公司
  • 嘉兴建设规划网站/域名注册网站查询