Python的logging模块基本用法
作者:何雨龙 发布时间:2021-01-06 07:39:52
标签:Python,logging,模块
在服务器部署时,往往都是在后台运行。当程序发生特定的错误时,我希望能够在日志中查询。因此这里熟悉以下 logging 模块的用法。
logging 模块定义了报告错误和状态信息的标准 API。
logging 的组件
日志系统有 4 个相互交互的组件。我们需要使用 Logger 实例来向日志添加信息。触发日志会创建一个 LogRecord,用于内存中存储信息。Logger 可能有很多 Handler 对象,用于接收和处理日志记录。Handler 使用 Formatter 来输出日志记录。
向文件输入日志
大多数应用都是把日志输入到文件。使用 basicConfig() 函数可以设置默认的 handler,让日志输入到文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
LOG_FILENAME = 'log.txt'
logging.basicConfig(
filename=LOG_FILENAME,
level=logging.DEBUG,
)
logging.debug('hello logging!')
with open(LOG_FILENAME, 'rt') as f:
body = f.read()
print('FILE: ')
print(body)
运行脚本后输出如下:
FILE:
DEBUG:root:hello logging!
日志文件的循环
要让每次程序运行时,生成一个新的文件,需要向 basicConfig() 传一个值为 w 的 filemode 参数。还有一个更方便的方法,就是使用 RotatingFileHandler,可以同时自动创建文件和保存旧文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import glob
import logging.handlers
LOG_FILENAME = 'log.txt'
my_logger = logging.getLogger('SpecificLogger')
my_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME,
maxBytes=20,
backupCount=5,
)
my_logger.addHandler(handler)
# Log some messages
for i in range(20):
my_logger.debug(f'i = {i}')
# See what files are created
log_files = glob.glob(f'{LOG_FILENAME}*')
for filename in sorted(log_files):
print(filename)
运行脚本后输出如下:
log.txt
log.txt.1
log.txt.2
log.txt.3
log.txt.4
log.txt.5
可以返现,log.txt 存储的都是最新的内容,logging 会自动地对这些文件进行重命名。
信息显示的级别
logging 有不同的日志级别。
级别(level) | 值(value) |
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
UNSET | 0 |
日志可以只在某一级别之上的情况才会触发。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import sys
level = int(sys.argv[1])
logging.basicConfig(
level=level
)
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
$ python logging_level.py 10
DEBUG:root:debug message
INFO:root:info message
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
$ python logging_level 40
ERROR:root:error message
CRITICAL:root:critical message
命名 logging 实例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logging.basicConfig(
level=logging.WARNING
)
logger1 = logging.getLogger('package1.module1')
logger2 = logging.getLogger('package2.module2')
logger1.warning('hello 1')
logger2.warning('hello 2')
运行脚本后输出:
WARNING:package1.module1:hello 1
WARNING:package2.module2:hello 2
来源:https://www.cnblogs.com/noluye/p/11224137.html


猜你喜欢
- queue和pipe的区别: pipe用来在两个进程间通信。queue用来在多个进程间实现通信。 此两种方法为所有系统多进程通信的基本方法,
- 任务描述本次实践是一个多分类任务,需要将照片中的宝石分别进行识别,完成宝石的识别实践平台:百度AI实训平台-AI Studio、Paddle
- 闭包的概念我们尝试从概念上去理解一下闭包。在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部函数引用了外部函数的变量,则可能产生闭
- tpch是TPC(Transaction Processing Performance Council)组织提供的工具包。用于进行OLAP测
- 当我想要完美的使用:nth-child或者:nth-of-type的时候有点儿头晕。你越理解它们,就能写出越好的CSS规则!在这些简单的”秘
- 前言Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作。 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备
- 存储过程 in参数 的使用IN参数只用来向过程传递信息,为默认值。-- 存储过程中 in 参数的 使用DELIMITER ;; CREATE
- numpy的delete是可以删除数组的整行和整列的,下面简单介绍和举例说明delete函数用法:numpy.delete(arr, obj
- 1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过
- output输出打包后的代码,配置如何输出和输出位置在webpack.config中output包含以下属性:path:代码打包后要输出的位
- 目录一、索引下推优化的原理二、索引下推的具体实践1、没有使用ICP2、使用ICP三、索引下推使用条件索引下推(Index Condition
- 前言:如果大家接触过数据分析,那么大家可能都知道,最让人头疼的就是在数据录入的过程中,不可避免的会产生重复值,缺失值和异常值了,python
- 代码如下: <!--[if IE 6]><script type="text/javascript"&
- 前言在编程过程中,我们经常会用到与时间和日期相关的各种需求,下面来介绍 Go 语言中有关时间的一些基本用法。时间类型time.Time 类型
- 使用Python获取网段的IP个数以及地址清单需要用到IPy的库,而相应的方法主要就是IP。写小脚本如下: from IPy import
- 当大家发现数据库查询性能很慢的时候,大家都会想到加索引来优化数据库查询性能,但是面对一个复杂的SQL语句,找到一个优化的索引组合对人脑来讲,
- 在Windows平台下,如果想运行爬虫的话,就需要在cmd中输入:scrapy crawl spider_name这时,爬虫就能启动,并在控
- 废话不多说了,直接给大家贴代码了。-- create functioncreate function [dbo].[fnXmlToJson]
- 本文介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查。什么是PyMySQL?PyMySQL是Python3.x版本中用于
- 如下所示:for line in file.readlines():line=line.strip('\n')来源:http