Python日志模块logging基本用法

news/2024/4/24 7:32:11/文章来源:https://blog.csdn.net/weixin_40582034/article/details/129134951

目录

logging模块

TimedRotatingFileHandler模块 


logging模块

当开发一个大型Python应用程序时,可能需要记录不同级别的日志以及调试信息,以便在遇到问题时快速诊断问题。Python内置的logging模块可以帮助你完成这些任务。

Python的logging模块支持多个日志处理程序(handler),每个处理程序可以定义自己的日志级别。例如,你可以将INFO级别的日志写入磁盘文件,将WARNING级别的日志输出到控制台,将ERROR级别的日志发送到Email。这种灵活的配置方式可以使你根据自己的需要,将日志信息传递给不同的处理程序。

logging模块还支持日志的格式化输出。你可以指定日期格式、日志级别、日志信息等内容。通过使用不同的格式化选项,可以轻松地自定义日志信息的输出格式。

下面是logging模块中的几个重要概念:

  • Logger:Logger是Python logging模块的主要接口,你可以通过Logger来创建不同的日志记录器。你可以为不同的模块或代码块创建不同的Logger来实现日志的分级和分模块管理。

  • Handler:Handler是一个输出日志的处理器,可以将日志写入文件、控制台或网络。每个Logger可以有多个Handler,你可以根据不同的需求配置不同的Handler。

  • Formatter:Formatter定义了日志输出的格式,可以定义日期格式、日志级别、日志信息等内容。

  • Filter:Filter可以用来控制哪些日志记录被处理。你可以根据不同的过滤条件来实现日志的过滤。

logging模块的使用流程一般是这样的:

  1. 创建Logger对象,为它设置日志级别和日志格式;
  2. 创建Handler对象,为它设置日志级别和日志格式;
  3. 将Handler对象添加到Logger对象中;
  4. 使用Logger对象输出日志。

下面是一个简单的例子,演示了如何使用logging模块输出日志到控制台和文件:

import logging# 创建Logger对象
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)# 创建FileHandler对象
file_handler = logging.FileHandler('mylog.log')
file_handler.setLevel(logging.DEBUG)# 创建StreamHandler对象
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)# 创建Formatter对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)# 添加Handler对象到Logger对象中
logger.addHandler(file_handler)
logger.addHandler(stream_handler)# 输出日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在这个例子中,首先创建了Logger对象,并设置了日志级别为DEBUG。然后创建了FileHandler和StreamHandler对象,分别用于输出日志到文件和控制台。接着创建了Formatter对象,用于定义日志输出的格式。最后将FileHandler和StreamHandler添加到Logger对象中,并通过Logger对象输出了不同级别的日志信息。

通过使用logging模块,你可以实现非常灵活的日志记录和管理。你可以将日志输出到不同的地方,实现日志的分级和分模块管理。如果你正在开发一个大型的Python应用程序,logging模块可以帮助你更好地理解应用程序的运行状态,并帮助你快速定位和解决问题。

TimedRotatingFileHandler模块 

TimedRotatingFileHandler是Python中logging模块提供的一个Handler,它的作用是根据一定的时间间隔来切分日志文件。它会在一定的时间间隔后自动将日志内容写入新的日志文件,以便更好地管理日志文件大小和数量。

TimedRotatingFileHandler构造函数接收以下参数:

  • filename:日志文件的名称,包括路径。如果文件不存在,将会自动创建。
  • when:用于指定切分日志的时间间隔,取值为:S、M、H、D、W0-W6和midnight。其中S、M、H分别表示秒、分钟和小时,D表示天,W0-W6表示星期天到星期六,midnight表示每天的凌晨。
  • interval:切分日志的时间间隔,取值为整数,单位是when指定的时间单位。例如:当when为'D'时,interval为1表示每天切分日志,interval为7表示每7天切分日志。
  • backupCount:保留的日志文件数量,如果超过这个数量,旧的日志文件将会被删除。

下面是一个使用TimedRotatingFileHandler的例子:

import logging.handlers# 创建TimedRotatingFileHandler对象
handler = logging.handlers.TimedRotatingFileHandler(filename='mylog.log',when='D',interval=1,backupCount=7,encoding='utf-8'
)# 创建Formatter对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)# 创建Logger对象
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)# 输出日志
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

在这个例子中,创建了一个TimedRotatingFileHandler对象,用于将日志输出到文件。使用when指定了按天切分日志文件,使用interval指定了每天切分日志文件,使用backupCount指定了保留7个日志文件。每次运行这个程序,日志输出将会被追加到mylog.log文件中,如果文件大小超过了指定的大小,将会自动创建一个新的日志文件,最多保留7个日志文件。

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

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

相关文章

通过命令行快速了解电脑CPU架构

Linux 和 MacOS 使用终端(小黑窗)执行下面的命令,根据输出结果查表: uname -m输出 的内容分别对应架构 输出对应架构i386, i686i386x86_64amd64arm, armelarm_garbagearmv7l, armhfarmv7*mipsmips*mips64mips64*Window 按 WinR …

【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

先上Roms.tar.gz安装地址:Roms.tar.gz 以下内容是解决问题的思路,如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: 先是卡在:Building wheel for AutoROM.accept-rom-license 然后是显示安装失败…

预告|2月25日 第四届OpenI/O 启智开发者大会昇腾人工智能应用专场邀您共启数字未来!

如今,人工智能早已脱离科幻小说中的虚构想象,成为可触及的现实,并渗透到我们的生活。随着人工智能的发展,我们正在迎来一个全新的时代——数智化时代。数据、信息和知识是这个时代的核心资源,而人工智能则是这些资源的…

感知数据温度,聚焦海量冷数据存储难题

在信息科技高速发展的背景之下,海量数据已经让拥有者和管理者应接不暇,根据IDC发布的《数据时代2025》预测,全球数据圈(数据圈代表每年被创建、采集或是复制的数据集合)将从2018 年的32ZB增至2025年的175ZB。2018年&am…

骨传导耳机工作原理,骨传导耳机优缺点

骨传导耳机虽说最近是十分火爆的一款单品,但还是有很多人对骨传导耳机不是很了解,骨传导耳机更多使用场景还是在户外运动使用,骨传导耳机对于长时间使用耳机的人来说十分友好,这主要还是得益于骨传导耳机传输声音的特殊性。 下面我…

【轻量级自适应加权网络:超分】

Lightweight adaptive weighted network for single image super-resolution (单幅图像超分辨率的轻量级自适应加权网络) 近年来,深度学习已成功应用于单幅图像超分辨率(SISR)任务,并取得了上级的性能。然…

Django使用jinja2模板

Django使用jinja2模板 jinja2介绍 Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,尤其是Flask框架内置的模板语言…

异步执行结果-Callable、Future、FutureTask

Callable 实现Runnable接口的任务执行没有返回值&#xff0c;如果我们希望线程运算后将结果返回&#xff0c;应该使用Callable。Callable代表有返回值的任务。 class CallTask implements Callable<String> {Overridepublic String call() throws Exception {return Th…

前端开发环境搭建

文章目录Node.js是什么安装查看版本入门示例NPM使用 npm 命令安装模块常见命令使用淘宝 NPM 镜像TypeScript安装入门示例从github拉取构建项目如何从零创建一个TypeScript项目规划目录结构新建项目Web App运行服务添加依赖打包使用browserify打包使用webpack打包推荐流程目录配…

以学校数据模型为例,掌握在DAS下使用GaussDB

文章目录题目具体操作一、表的创建二、表数据的插入三、数据查询目的&#xff1a; 这里以学校数据库模型为例&#xff0c;介绍GaussDB数据库、表等常见操作&#xff0c;以及SQL语法使用的介绍。题目 假设A市B学校为了加强对学校的管理&#xff0c;引入了华为GaussDB数据库。 在…

GEE学习笔记 六十三:新的地图图层ui.Map.CloudStorageLayer

在GEE中导出数据有一种方式是直接导出地图到Google Cloud Storage中&#xff0c;也就是Export.map.toCloudStorage(xxx)&#xff0c;这种方式是将我们计算生成影像导出成为静态瓦片的格式存放在Google Cloud Storage中。我们可以在其他的前端程序比如OpenLayer、Mapbox GL JS等…

实时数仓Hologres新一代弹性计算组实例技术揭秘

作者&#xff1a;王奇&#xff08;花名慧青&#xff09; 阿里云Hologres研发 随着实时数仓在业务生产系统的普及&#xff0c;资源弹性、资源隔离等保障业务稳定性方面的技术需求开始变得越来越迫切。Hologres在保障业务方面持续优化核心技术竞争力&#xff0c;过去一年中&…

自建商城或会员系统如何对接在线客服咨询系统,例如商城系统、物流订单系统接入在线客服功能...

自建商城或会员系统如何对接在线客服咨询系统&#xff0c;例如商城系统、物流订单系统接入在线客服功能 对接在线客服咨询系统可以帮助您的客户更快地获得问题解答和支持&#xff0c;提升客户满意度和忠诚度。 在商品详情页面传递产品信息 在进入产品详情页面以后&#xff0c;需…

FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(一)

在最后一个例程中笔者精挑细选了一个较为综合性的项目实战&#xff0c;其中覆盖了很多知识点&#xff0c;也是从一个转产产品中所提炼出来的&#xff0c;所以非常贴近实战项目。 整个工程实现了用户通过对上位机PC端人机界面的操作&#xff0c;即可达到控制豌豆开发并行DAC输出…

计算时间序列周期的三种方法

周期是数据中出现重复模式所需的时间长度。更具体地说&#xff0c;它是模式的一个完整周期的持续时间。在这篇文章中&#xff0c;将介绍计算时间序列周期的三种不同方法。 我们使用City of Ottawa 数据集&#xff0c;主要关注的是每天的服务呼叫数量。所以不需要对病房名称进行…

选型最佳实践|从业务场景分析直播SDK

摘要 近两年即时通讯/直播产品炙手可热&#xff0c;市场上针对ToB的产品日益增多&#xff0c;企业该如何去选型呢&#xff1f;本文分享了笔者对于直播产品的思考&#xff0c;将从直播SDK实例功能特性、常见业务场景、注意事项及最佳实践等方面介绍如何进行实例选型&#xff0c;…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类的引入…

Umi框架

什么是 umi umi 是由 dva 的开发者 云谦 编写的一个新的 React 开发框架。umi 既是一个框架也是一个工具&#xff0c;可以将它简单的理解为一个专注性能的类 next.js 前端框架&#xff0c;并通过约定、自动生成和解析代码等方式来辅助开发&#xff0c;减少开发者的代码量。 u…

算法18:LeetCode_链表相关算法题

链表无小事&#xff0c;只要是涉及到链表的算法题&#xff0c;边界值的设定尤为重要&#xff0c;而且及其容易出错误。这就要求我们平时多加练习。但是&#xff0c;我们在面试和笔试的过程中往往会碰到链表相关的题目&#xff0c;所以我们在笔试的时候一般都会借助系统提供的工…

Netty (三):进阶

文章目录1. 粘包与半包1.1 粘包现象1.2 半包现象1.3 现象分析1.4 解决方案方法1&#xff0c;短链接方法2&#xff0c;固定长度方法3&#xff0c;固定分隔符方法4&#xff0c;预设长度2. 协议设计与解析2.1 为什么需要协议&#xff1f;2.2 redis 协议举例2.3 http 协议举例2.4 自…