【Python】Python中的logging模块介绍和示例
Python中的logging模块是一个强大的内置模块,用于记录和跟踪应用程序的运行过程。它提供了灵活的日志记录功能,可以将日志消息输出到多个目标(如控制台、文件、远程服务器等),并支持不同的日志级别。以下是logging模块的一些关键概念和使用方法:
关键概念
- Logger: 日志记录器,用于生成日志消息。应用程序代码中使用
logger对象记录日志。 - Handler: 处理器,定义日志消息的输出位置(如控制台、文件、网络等)。
- Formatter: 格式化器,定义日志消息的格式(如时间戳、日志级别、消息内容等)。
- Log Level: 日志级别,用于表示日志消息的严重程度。常见的日志级别有:
DEBUG: 详细的调试信息,通常用于诊断问题。INFO: 一般的运行信息,表示程序正常运行。WARNING: 警告信息,表示可能的问题。ERROR: 错误信息,表示发生了严重的问题。CRITICAL: 致命错误信息,表示程序无法继续运行。
基本用法
以下是一个简单的示例,展示了如何使用logging模块记录日志:
import logging# 创建一个Logger对象
logger = logging.getLogger('example_logger')
logger.setLevel(logging.DEBUG) # 设置日志级别# 创建一个Handler对象,将日志输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)# 创建一个Formatter对象,定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)# 将Handler添加到Logger
logger.addHandler(console_handler)# 记录日志消息
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
高级用法
将日志输出到文件
可以使用FileHandler将日志消息写入文件:
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
配置多个Handler
可以为同一个Logger配置多个Handler,以实现日志消息的多种输出方式:
logger.addHandler(console_handler)
logger.addHandler(file_handler)
使用配置文件配置日志
可以使用配置文件(如JSON或YAML)配置日志:
import logging.config
import jsonconfig = {"version": 1,"formatters": {"default": {"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"}},"handlers": {"console": {"class": "logging.StreamHandler","level": "DEBUG","formatter": "default"},"file": {"class": "logging.FileHandler","level": "ERROR","formatter": "default","filename": "app.log"}},"root": {"level": "DEBUG","handlers": ["console", "file"]}
}logging.config.dictConfig(config)
logger = logging.getLogger()logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
自定义Logger
可以创建多个Logger对象,用于不同的模块或子系统:
module_logger = logging.getLogger('module_logger')
module_logger.setLevel(logging.INFO)
module_logger.addHandler(console_handler)module_logger.info('This is an info message from module_logger')
捕获异常信息
可以使用exception方法记录异常堆栈信息:
try:1 / 0
except ZeroDivisionError:logger.exception("Exception occurred")
logging模块是Python应用程序中记录和调试的重要工具,灵活配置和使用该模块可以帮助开发者更好地了解和维护代码。
相关文章:
【Python】Python中的logging模块介绍和示例
Python中的logging模块是一个强大的内置模块,用于记录和跟踪应用程序的运行过程。它提供了灵活的日志记录功能,可以将日志消息输出到多个目标(如控制台、文件、远程服务器等),并支持不同的日志级别。以下是logging模块…...
PXIe规格i3/i5/i7单板计算机控制器
是专为PXIe混合测试系统设计的主控制器,3U 12HP PXIe规格。该产品采用Intel Core™i3/i5/i7 第四代高性能处理器,内存可支持高达16G DDR3L。该系统PXI Express的link配置为通用的4Port 4lane的模式,数据吞吐量高达8GB/S。 CX786x提供丰富灵活…...
弱网对抗的策略有哪些?
在弱网环境下,数据传输可能会面临丢包、延迟、抖动等问题,因此采取合适的弱网对抗策略对于确保数据传输的稳定性和可靠性至关重要。以下是一些常见的弱网对抗策略: 数据压缩:使用压缩算法如Gzip、Brotli等对数据进行压缩…...
如何通过OMS加快大表迁移至OceanBase
OMS,是OceanBase官方推出的数据迁移工具,能够满足众多数据迁移场景的需求,现已成为众多用户进行数据迁移同步的重要工具。OMS不仅支持多种数据源,还具备全量迁移、增量同步、数据校验等功能,并能够对分表进行聚合操作&…...
讨论:WGS84与CGCS2000的坐标系怎么互转
前言: 今天我们要讨论一个问题:WGS84与CGCS2000的坐标系怎么互转? 对于有一定基础的朋友应该知道,WGS84和CGCS2000属于不同的椭球,如果进行严密的数学转换,是需要建立参数模型之后,再进行转换&…...
SpringCloud面试题
SpringCloud常见组件有哪些 注册中心组件:Eureka、Nacos 负载均衡组件:Ribbon 远程调用组件:OpenFeign 网关组件:Zuul、Gateway 服务保护组件:Hystrix、Sentinel 服务配置管理组件:SpringCloudConfig、Nac…...
深入了解Java Stream中的Collectors.partitioningBy()
在Java编程中,Stream API是一种强大的工具,它提供了处理集合数据的便捷方式。而Stream API中的Collectors.partitioningBy()方法则是其中一个十分有用的函数,它允许我们根据指定的条件将元素分成两个组。在本文中,我们将深入探讨这…...
下拉多选【bootstrap-multiselect】
1、引入资源 <link rel="stylesheet" href="${components}/bootstrap/css/bootstrap-multiselect.css"> <script src="${components}/bootstrap/js/bootstrap-multiselect.js"></script> 2、初始化 $("#topic-select&qu…...
建筑(八大员)报考条件
建筑八大员报考时间2024 建筑八大员每年考两次,上半年的考试时间一般在5-6月份,下半年的考试时间一般在10月左右。报名在考前2个月进行,2024年的考试时间和次数可能因省份而异,以住建厅通知为准。建筑八大员报考条件2024 1、年龄在18周岁以上(含18周…...
_remote.repositories作用
问题描述 明明我本地有某个依赖但是却还是报错,原因就是存在_remote.repositories且你的远程仓库中找不到该依赖,可能发生在你修改了远程仓库或镜像时。 例子 本地有这个依赖,但是报错。 解决 删除_remote.repositories文件࿰…...
2.3 Spark运行架构与原理
Spark运行架构由SparkContext、Cluster Manager和Worker构成。在集群模式下,Driver进程初始化SparkContext并向Cluster Manager申请资源,后者根据算法在Worker节点上启动Executor。Executor负责任务执行,反馈状态给Cluster Manager。任务由Ta…...
redis的跳表
typedef struct zskiplistNode {// 分值double score;// 成员对象robj *obj;// 后退指针struct zskiplistNode *backward;// 层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;// 跨度unsigned int span;} level[]; } zskiplistNode;跳表的节点查找算法可以…...
探索未知,开启海外盲盒新纪元——海外盲盒App,你的全球奇遇宝箱
一、引言 在快节奏、高压力的现代生活中,我们时常渴望一份来自未知的惊喜。为此,我们精心打造了一款全新的海外盲盒App,带你跨越地域界限,开启一场充满惊喜的全球奇遇之旅。 二、产品介绍 海外盲盒App是一款集购物、娱乐、文化…...
LeetCode2215找出两数组的不同
题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…...
Git系列:git show 使用技巧
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
python爬虫(五)之新出行汽车爬虫
python爬虫(五)之新出行汽车爬虫 接完最后一单,终于肝完了最后一个python爬虫——新出行爬虫,将https://www.xchuxing.com网站上所有的汽车爬虫全部抓取下来。 import requests import json import csv from lxml import etree …...
记录:卡尔曼滤波推导
参考:古月居-卡尔曼滤波 一、高斯分布(Gaussian Distribution) 一维高斯分布:随机变量 X X X服从数学期望 μ \mu μ、方差 σ 2 \sigma^2 σ2的正态分布,概率密度函数为 p ( x ) p(x) p(x)。 X ∼ N ( μ , σ 2 )…...
AI游戏外挂为何违法?
尊敬的读者们,大家好!今天我想和大家探讨一个备受争议的话题——AI游戏外挂的合法性。近年来,随着人工智能技术的飞速发展,AI外挂逐渐成为游戏领域的一大毒瘤。那么,为什么AI游戏外挂会被视为违法行为呢?本…...
UVa1006/LA2238 Fixed Partition Memory Management
UVa1006/LA2238 Fixed Partition Memory Management 题目链接题意输入格式输出格式 分析AC 代码 题目链接 本题是2001年icpc世界总决赛的G题 题意 早期的多程序操作系统常把所有的可用内存划分成一些大小固定的区域,不同的区域一般大小不同,而所有区域的…...
Autosar架构
蓝框那种叫component,绿框的叫function cluster。 接口 有三种接口,RTE跟SWC之间链接的叫Autosar Interface,RTE跟BSW的Components链接是Standardized Interface,RTE跟BSW的services链接的是Standardized Autosar Interface。 St…...
Android应用集成AI:调用MiniCPM-o-4.5-nvidia-FlagOS实现移动端智能对话
Android应用集成AI:调用MiniCPM-o-4.5-nvidia-FlagOS实现移动端智能对话 你有没有想过,给自己的手机App装上一个“大脑”,让它能像朋友一样跟你聊天、解答问题?过去,这听起来像是科幻电影里的情节,但今天&…...
地理信息系统知识点03---空间数据模型
一、地理空间与空间抽象1. 地理空间地理空间是 GIS 的描述与分析对象,泛指地球表层空间及其相关的关联空间,既包含具有地理位置的实体、现象,也涵盖它们之间的相互作用与分布规律。从内涵上,地理空间具有区域性、多维性、随机性、…...
LFM2.5-1.2B-Thinking-GGUF入门必看:llama.cpp+GGUF轻量模型部署全流程
LFM2.5-1.2B-Thinking-GGUF入门必看:llama.cppGGUF轻量模型部署全流程 1. 模型与平台介绍 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。该模型采用GGUF格式,结合llama.cpp运行时,能…...
扩展你的 RAG:基于 Rust 的 LanceDB 和 Candle 索引管道
原文:towardsdatascience.com/scale-up-your-rag-a-rust-powered-indexing-pipeline-with-lancedb-and-candle-cc681c6162e8?sourcecollection_archive---------2-----------------------#2024-07-11 构建大规模文档处理的高性能嵌入和索引系统 https://medium.co…...
UUV Simulator 一站式部署指南:从零搭建Ubuntu20.04、ROS Noetic与Gazebo11仿真环境
1. 环境准备:虚拟机与Ubuntu20.04部署 水下机器人仿真开发的第一步是搭建稳定的基础环境。我推荐使用VMware Workstation Pro 17作为虚拟机平台,它的快照功能能让你在配置出错时快速回滚。实测在Windows 10/11系统上运行稳定,对硬件资源的调度…...
嵌入式调试技巧:使用串口、J-Link 定位 Bug 效率翻倍
在嵌入式软件开发领域,有一句广为流传的话:“写代码只占20%的时间,调试占了80%。”虽然这个比例因人而异,但调试确实是整个开发流程中最不可预测、最消耗精力的环节。当一个程序在硬件上“跑飞”了,或者某个外设莫名其…...
OpenClaw学习路径:从Qwen3.5-9B基础对接到复杂技能开发
OpenClaw学习路径:从Qwen3.5-9B基础对接到复杂技能开发 1. 为什么选择OpenClaw作为自动化开发框架 第一次接触OpenClaw是在一个深夜加班调试Python脚本的时候。当时我正在处理几百个Markdown文件的批量重命名和内容提取,重复的手工操作让我开始思考&am…...
GeekDoc
GeekDoc 中文系列教程是一个庞大且组织良好的技术文档集合,它并非单一教程,而是一个开源文档翻译与整理项目,旨在将优秀的技术文档和教程翻译成中文,并按技术领域进行分类。其内容广泛覆盖了信息技术领域的多个核心方向࿰…...
C语言函数指针与回调函数实战指南
1. 函数指针:C语言的瑞士军刀在C语言的世界里,指针堪称是这门语言的灵魂所在。我们熟悉整型指针、字符指针、结构体指针,但函数指针这个强大的工具却常常被开发者忽视。实际上,函数指针是理解回调函数的基础,也是实现C…...
SOONet模型Git版本管理与协作开发实践指南
SOONet模型Git版本管理与协作开发实践指南 如果你正在和团队一起开发基于SOONet的项目,是不是经常遇到这些问题:谁改了哪个配置文件?为什么我本地跑得好好的,合并到主分支就出错了?新功能开发到一半,线上突…...
