python基础使用之记录日志模块

我们在编写Python 程序时,记录日志信息是一种非常重要的需求,日志可以帮助调试和跟踪程序的执行过程。那么Python中提供了内置的logging模块,用于记录各种级别的日志信息。本文主要介绍Python日志信息输出的实现过程。

1. 导入 logging 模块

首先,需要导入 logging 模块。

import logging

2. 配置日志记录器

需要配置一个日志记录器,以便在程序中的不同地方记录日志信息。

logging.basicConfig(level=logging.DEBUG,  # 设置记录的最低级别
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')


3. 记录日志信息

在程序的不同位置记录日志信息

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.")

4. 设置日志级别

通过设置日志记录器的级别,可以控制记录的日志信息的详细程度。级别包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL。

logging.basicConfig(level=logging.INFO)

5. 输出日志到文件

除了控制台输出,还可以将日志信息记录到文件中。

logging.basicConfig(filename='example.log', level=logging.INFO)

6. 格式化日志信息

通过设置不同的格式,可以自定义日志信息的输出格式。

logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')

7. 捕获异常信息

程序运行过程中,难免会遇到报错,在捕获异常时,也可以记录异常信息。

try:
    # 一些可能出现异常的操作
except Exception as e:
    logging.error(f"An error occurred: {e}", exc_info=True)

8. 使用不同的日志记录器

可以创建不同的日志记录器,以便将日志信息分发到不同的地方。

logger = logging.getLogger('example_logger')
logger.setLevel(logging.DEBUG)

9、一个日志配置的实例

import logging

# 配置日志记录器,设置记录的最低级别为 DEBUG,同时指定输出格式
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 创建一个日志记录器
logger = logging.getLogger('example')

# 输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
logger.addHandler(console_handler)

# 输出到文件
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.INFO)
logger.addHandler(file_handler)

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        logger.error("Tried to divide by zero", exc_info=True)  # 记录异常信息
    else:
        logger.info(f"{x} divided by {y} is {result}")  # 记录除法结果

# 调用函数并记录日志信息
divide(10, 2)
divide(10, 0)

在这个例子中,首先配置了一个日志记录器,并设置了记录的最低级别为 DEBUG,同时指定了输出格式。然后创建了一个名为 example 的日志记录器。
将两个处理器添加到日志记录器中:一个是输出到控制台的处理器,另一个是输出到文件的处理器。
用于测试,定义了一个 divide() 函数来执行除法运算,同时记录除法结果或异常信息到日志中。
最后,我们调用 divide() 函数两次,一次是正常情况下的除法运算,另一次是尝试除以零的情况。
日志信息将会输出到控制台和名为 example.log 的文件中。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/426971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++入门全集(4):类与对象【下】

一、再谈构造函数 1.1 构造函数体内赋值 我们知道,在创建对象时,编译器会自动调用构造函数给对象中的各个成员变量一个合适的初始值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _yea…

开源项目:智能化图像分类技术在新能源发电监控中的应用与实践

一、引言 在当今世界,能源的转型和升级是推动社会可持续发展的关键因素。随着技术的进步,新能源发电逐渐成为能源结构调整的重要力量。在众多发电方式中,新能源发电技术如风力、太阳能等因其清洁、可再生的特性而备受青睐。然而,…

百度文库旋转验证码识别

最近研究了一下图像识别,一直找到很好的应用场景,今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好,下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫,对验证码图片进行采…

MATLAB中sigmoid函数用法

目录 语法 说明 示例 应用 sigmoid 激活 sigmoid函数的功能是应用sigmoid激活 语法 Y sigmoid(X) 说明 sigmoid 激活运算将 sigmoid 函数应用于输入数据。此运算等效于: 注意 此函数将 sigmoid 运算应用于 dlarray 数据。如果要在 layerGraph 对象或 Layer …

Git 版本控制

Git 版本控制 1. About Version Control (关于版本控制)1.1. Local Version Control Systems (本地版本控制系统)1.2. Centralized Version Control Systems (集中化的版本控制系统)1.3. Distributed Version Control Systems (分布式版本控制系统) 2. 换行符的处理3. keyboard…

深入理解Docker自定义网络:构建高效的容器网络环境

目录 博客前言: 一.docker自定义网络介绍 1.docker自定义网络介绍 2.使用技术的优势 3.基本使用流程 二.实战操作 1.模式理论介绍 bridge模式(默认模式) host模式 2.模式特点 查看桥接模式的特点 查看仅主机模式的特点 3.实战操作 bridge模式 host模式 自定义网络…

Android Compose - PlainTooltipBox(已废弃)的替代方案

Android Compose - PlainTooltipBox 的替代方案 TooltipBox(positionProvider TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip {PlainTooltip {Text(/* tooltip content */)}},state rememberTooltipState(), ) {// tooltip anchorIconButton(onClick {…

EdgeX Foundry - MQTT 设备服务

文章目录 一、MQTT 设备服务1.概述2.服务配置3.协议属性4.多级 Topics4.1.异步数据4.2.命令 二、连接 MQTT 设备1.docker-comepse2.设备配置文件3.安装自定义配置4.启动 EdgeX Foundry5.创建 MQTT 设备模拟器6.访问 UI6.1. consul6.2. EdgeX Console 7.测试7.1.命令7.2.事件7.3…

【踏雪无痕的痕五】——一年级数学题映射动态规划

目录 一、背景介绍三、过程1.那是什么样的一个数学题?2.动态规划是个啥?3.为啥联系到动态规划了?4.拿01背包算法做个小例子练练手吧5.感受 四、总结 一、背景介绍 小编发烧并发症一周了,这一周从最开始的轻飘飘找不到灵魂在哪里—…

【心理】程序人生之情绪与压力篇,附心理学相关证书备考指南(心理学312统考,心理治疗师,中科院心理咨询师,家庭教育指导师,企业培训证书)

程序员生活指南(情绪与压力篇)之 【心理】程序人生之情绪与压力专项,附心理学相关证书备考指南(心理学312统考,心理治疗师,中科院心理咨询师,家庭教育指导师,企业培训证书&#xff0…

Linux之进程信号

目录 一、概念引入 1、生活中的信号 2、Linux中的信号 二、信号处理常见方式 三、信号的产生 1、键盘产生信号 2、系统调用接口产生信号 3、软件条件产生信号 4、硬件异常产生信号 四、信号的保存 相关概念 信号保存——三个数据结构 信号集——sigset_t 信号集操…

程序员如何选择职业赛道?

程序员选择职业赛道就像是在一个充满挑战和机遇的迷宫中探索。不同的职业赛道代表着不同的路径,每条路径都有其独特的风景和挑战。我愿意为大家提供一些关于如何选择职业赛道的建议。本文将分为几个部分,包括了解自己、了解行业、职业规划、技能提升和持…

单片机独立按键控制LED状态

一、前言 这幅图是按键的抖动与时间的联系 按键抖动:对于机械开关,当机械鮑点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的…

加密与安全_探索数字证书

文章目录 Pre概述使用keytool生成证书使用Openssl生成证书 (推荐)证书的吊销小结 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 04 证书授权颁发机构(CA) & 数字证书 PKI - 数字签名与数字证…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

GEE:使用双曲正切(tanh)激活函数对单波段图像进行变换(以NDVI为例)

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine (GEE)平台上,对任意单波段影像进行 双曲正切(tanh)激活函数 变换的代码。并以对 NDVI 影像中像素值的变换为例。 文章目录 一、tanh激活函数1.1 tanh激活函数1.2 用到遥感图像上有什么用?二、代码链接三、完整代…

STL——queue

queue 1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。 2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特…

Linux入门到入土

Linxu Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口&#xff09…

Vscode 使用SSH远程连接树莓派的教程(解决卡在Downloading with wget)

配置Vscode Remote SSH 安装OpenSSH 打开Windows开始页面,直接进行搜索PowerShell,打开第一个Windows PowerShell,点击以管理员身份运行 输入指令 Get-WindowsCapability -Online | ? Name -like OpenSSH* 我是已经安装好了,…

掘根宝典之c语言字符指针,指针数组,数组指针,函数指针

目录 字符指针 字符指针指向字符串 使用字符指针 例子 指针数组 数组指针 数组名和&数组名 数组名 sizeof(数组名),&数组名 &数组名 &数组名错误使用方法 数组名和&数组名用于一维数组 例子1 例子2 数组名和&数组名用于二维数…