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

使用 logging 模块生成 .log 文件

在 Python 中,使用 logging 模块生成 .log 文件非常简单。你需要为你的 logger 添加一个 FileHandler,并将其指向你想要的文件名(例如 my_app.log)。
以下是如何修改代码,使其既能输出到控制台又能输出到 .log 文件:

代码示例

import logging# 1. 获取 Logger (使用你已有的这行)
logger = logging.getLogger('CNNModel_YoloSeg')# 2. 配置 Logger (通常在程序启动时做一次)
if not logger.handlers:  # 防止重复添加 Handlerlogger.setLevel(logging.DEBUG)  # 记录 DEBUG 及以上级别的日志# --- 创建并配置控制台 Handler (可选,用于实时查看) ---console_handler = logging.StreamHandler()console_handler.setLevel(logging.INFO)  # 控制台只显示 INFO 及以上# --- 创建并配置文件 Handler (这是生成 .log 文件的关键!) ---# 指定日志文件的名称,例如 'cnn_yolo_seg.log'log_filename = 'cnn_yolo_seg.log' file_handler = logging.FileHandler(log_filename, mode='a', encoding='utf-8') # mode='a' 表示追加 (append),'w' 表示每次覆盖 (overwrite)# encoding='utf-8' 确保能正确处理中文等字符file_handler.setLevel(logging.DEBUG)  # 文件记录所有 DEBUG 及以上日志# --- 创建 Formatter (定义日志的格式) ---# 你可以自定义格式,这里包含时间、Logger名、级别和消息formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')# 常见的格式化字符串:#   %(asctime)s : 可读的时间戳 (如 2025-08-28 10:55:30,123)#   %(name)s    : Logger 的名字 (这里是 'CNNModel_YoloSeg')#   %(levelname)s: 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)#   %(message)s : 实际的日志消息#   %(filename)s: 发出日志的文件名#   %(funcName)s: 发出日志的函数名#   %(lineno)d  : 发出日志的行号# 将 Formatter 分别设置给 Handlerconsole_handler.setFormatter(formatter)file_handler.setFormatter(formatter)# --- 将 Handler 添加到 Logger ---logger.addHandler(console_handler)   # 输出到控制台logger.addHandler(file_handler)     # 输出到文件 (.log 文件!)# 3. 在代码中使用 Logger 记录日志
def train_model():logger.info("开始训练 YOLO Segmentation 模型...")try:# ... 模拟一些操作 ...logger.debug("正在加载训练数据集...")logger.info("成功加载 1000 个训练样本。")# ... 模拟训练 ...logger.warning("学习率较高,可能导致不稳定。")# ... 模拟完成 ...logger.info("模型训练完成。")except Exception as e:logger.error("训练过程中发生致命错误: %s", str(e), exc_info=True)raise# 4. 调用函数,这将生成日志
if __name__ == "__main__":train_model()

关键点解释

  1. FileHandler:
  • logging.FileHandler(filename, mode=‘a’, encoding=‘utf-8’) 是创建文件处理器的核心。
  • filename: 你想要生成的 .log 文件的路径和名称。可以是相对路径(如 ‘logs/my_app.log’)或绝对路径。
  • mode: ‘a’ (追加) 是最常用的,这样每次运行程序时,新的日志会添加到文件末尾。‘w’ 会覆盖旧文件。
  • encoding: 指定文件编码,推荐使用 ‘utf-8’ 以支持中文和其他字符。
  1. addHandler(file_handler): 这行代码将文件处理器添加到 Logger。只有添加了 Handler,Logger 才会把日志输出到相应的目标(文件或控制台)。
  2. if not logger.handlers:: 这是一个重要的检查。当你在多个地方导入这个模块时,如果每次都执行 addHandler,会导致日志消息被重复输出(例如,控制台出现多次)。这个检查确保 Handler 只被添加一次。
  3. 运行脚本: 当你运行这个 Python 脚本时,除了在控制台看到 INFO 级别的日志外,还会在脚本所在的目录下生成一个名为 cnn_yolo_seg.log 的文件。这个文件会包含所有 DEBUG 级别及以上的日志消息(因为 file_handler 的级别是 DEBUG),格式由 Formatter 定义。
http://www.xdnf.cn/news/18879.html

相关文章:

  • SMU算法与人工智能创新实践班SMU2025 Summer 7th 参考题解
  • npm install 安装离线包的方法
  • 光谱相机在雾霾监测中有何优势?
  • ABeam中国 | 中国汽车市场(5)——软件定义汽车(SDV)的智能化应用场景
  • MATLAB中的蛙跳算法实现
  • Android Glide插件化开发实战:模块化加载与自定义扩展
  • 从0开始搭建一个前端项目(vue + vite + typescript)
  • AI驱动企业数字化转型:解码未来三年的智能化变革密码
  • 深度学习④【经典卷积神经网络演进:从LeNet到ResNet(重要意义)的架构革命】
  • 【目标检测】论文阅读6
  • nvme ,文件系统、namespace、LBA,文件名的浅浅理解
  • 解决Visual Studio中UWP设计器无法显示的问题:需升级至Windows 11 24H2
  • SynClub-百度在海外推出的AI社交产品
  • Elasticsearch 启动反复重启排查实录:从“内存不足”到“vm.max\_map\_count 过小”
  • 力扣hot100:字母异位词分组和最长连续序列(49,128)
  • 【重学 MySQL】九十、Linux下MySQL的安装与卸载指南
  • Go 1.25新特性之容器感知功能详解
  • 嵌入式C语言进阶:位操作的艺术与实战
  • 8.27 网格memo
  • STM32 入门实录:从 0 到 3 色 LED 呼吸式闪烁
  • 【C++】菱形继承深度解析+实际内存分布
  • 2025.8.27链表_链表逆置
  • 科技赋能生态,智慧守护农林,汇岭生态开启农林产业现代化新篇章
  • TensorFlow 面试题及详细答案 120道(21-30)-- 模型构建与神经网络
  • 斯塔克工业技术日志:用基础模型打造 “战甲级” 结构化 AI 功能
  • uniapp H5禁止微信浏览器长按出菜单,只针对图片
  • 全球首款Al勒索软件PromptLock:跨平台攻击新威胁, Windows/macOs/Linux均受影响
  • 【生产事故处理--kafka日志策略保留】
  • 深入解析达梦数据库:模式分类、状态管理与实操指南
  • 【数据分享】安徽省安庆市地理基础数据(道路、水系、铁路、行政边界(含乡镇)、DEM等)