Python模块-logging模块(二)

logging模块记录日志有四个主要类:logger,handler,formatter,filter

logger提供了应用程序可以直接使用的接口,每个程序在输出信息之前都要获得一个Logger

handler将(logger创建的)日志记录发送到合适的目的输出,handler可以把信息输出到控制台,也可以把信息输出到文件,还可以把信息发送到网络上

formatter决定日志记录的最终输出格式

filter用来过滤日志记录,filter函数返回布尔值,logger根据返回的布尔值决定过滤的语句

在屏幕打印日志的同时写入日志文件:

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import logging

class IgnoreBackupLogFilter(logging.Filter):
    ‘‘‘忽略带warning的日志‘‘‘
    def filter(self, record): #固定写法
        return ‘warning‘ not in record.getMessage() #返回布尔类型

logger = logging.getLogger(‘web‘) #生成一个Logger对象,web为logger对象的名称
logger.setLevel(logging.INFO) #设置等级,默认为warning

stream_handler = logging.StreamHandler() #生成handler对象,用于屏幕上打印
file_handler = logging.FileHandler(‘web.log‘) #生成handler对象。用于生成日志文件

#把handler对象绑定到logger
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
# logger.removeHandler(stream_handler) #删除handler对象
# logger.removeHandler(file_handler)

#生成formatter对象,用于屏幕上打印
stream_formatter = logging.Formatter(‘%(name)s - %(asctime)s - %(levelname)s - %(message)s‘)
#生成formatter对象,用于日志文件
file_formatter = logging.Formatter(‘%(name)s - %(asctime)s - %(levelno)s - %(message)s‘)

#把formatter对象到handler对象
stream_handler.setFormatter(stream_formatter)
file_handler.setFormatter(file_formatter)

logger.addFilter(IgnoreBackupLogFilter()) #对日志内容进行过滤
#logger.removeFilter(IgnoreBackupLogFilter()) #删除filter对象

logger.debug(‘The Debug‘)
logger.info(‘The info‘)
logger.warning(‘The warning‘)
logger.error(‘The error‘)
logger.critical(‘The critical‘)

运行结果

日志内容

日志截断

根据文件大小

如日志文件为web.log,当web.log达到指定的大小之后,RotatingFileHandler自动把文件改名为web.log.1,如果web.log.1已经存在,会先把web.log.1重命名为web.log.2,最后重新创建web.log,继续输出日志信息

handlers.RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])

filename和mode两个参数和FileHandler一样,maxBytes为日志文件最大的大小,如果maxBytes为0,意味着日志文件可以无限大,就不再新建日志文件了。backupCount为生成的最多备份日志文件数,如果指定为3,就最多生成3个备份日志文件,如果备份日志文件已经生成3个了,再生成日志文件的话,web.log.3并不会被更名,而是被删除

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import logging
from logging import handlers

logger = logging.getLogger(‘web‘)
logger.setLevel(logging.INFO)

file_handler = handlers.RotatingFileHandler(‘web.log‘,maxBytes=5,backupCount=3)

logger.addHandler(file_handler)

file_formatter = logging.Formatter(‘%(name)s - %(asctime)s - %(levelno)s - %(message)s‘)

file_handler.setFormatter(file_formatter)

logger.debug(‘The Debug‘)
logger.info(‘The info‘)
logger.warning(‘The warning‘)
logger.error(‘The error‘)
logger.critical(‘The critical‘)

运行

生成了4个日志文件,web.log为最新的日志,web.log.3为最早的日志

根据时间

间隔指定的时间自动创建新的日志文件,重命名的过程与RotatingFileHandler类似,不过新的文件的命名方式为当前的时间

handlers.TimedRotatingFileHandler( filename [,when [,interval [,backupCount]]])

filename参数和backupCount参数和RotatingFileHandler的作用一样

when参数是一个字符串。表示时间间隔的单位,不区分大小写。S为秒,M为分,H为小时,D为天,W为每星期(interval=0时为星期一),midnight为每天凌晨

interval为时间间隔

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import logging
from logging import handlers

logger = logging.getLogger(‘web‘)
logger.setLevel(logging.INFO)

file_handler = handlers.TimedRotatingFileHandler(‘web.log‘,when=‘s‘,interval=3,backupCount=5)

logger.addHandler(file_handler)

file_formatter = logging.Formatter(‘%(name)s - %(asctime)s - %(levelno)s - %(message)s‘)

file_handler.setFormatter(file_formatter)

logger.debug(‘The Debug‘)
logger.info(‘The info‘)
logger.warning(‘The warning‘)
logger.error(‘The error‘)
logger.critical(‘The critical‘)

每隔5秒生成一个,需要运行才生成

运行结果

等级

logger设置的等级为最高的,脚本中以此为主

handler中设置的等级级别比logger设置的等级级别低

所以handler中打印的日志建立在logger的级别上,再考虑handler设置的等级

原文地址:https://www.cnblogs.com/sch01ar/p/8450613.html

时间: 2024-11-10 06:52:46

Python模块-logging模块(二)的相关文章

25.Python序列化模块,hashlib模块, configparser模块,logging模块,异常处理

一.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(di

python的logging模块

1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:Thisis warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING: 日志级别大小关系为:CRITICAL > ER

python - 常用模块 - logging模块

python主要是通过logging模块来进行日志处理 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口, 你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error(), critical() 5个级别, 日志级别: DEBUG INFO WARNING ERROR CRITICAL等级依次提高(打印的信息越来越少,DE

python之logging模块的使用

python的logging模块是用来写日志的,是python的标准模块. logging的结构 查看logging的python源码,可知主要有四个类实现功能: Loggers:提供应用程序直接使用的接口,如相关的配置设置: Handlers:将Loggers产生的日志传到指定位置,设置日志保存的位置: Filters:对输出日志进行过滤操作: Formatters:控制日志的输出格式: 日志记录的级别 DEBUG:优先级10,记录调试的详细信息,只在调试时开启: INFO:优先级20,记录普

Python基础-----logging模块

#!/usr/bin/env python#-*- coding:utf-8 -*- ########################################################################################################################################################灵活配置日志级别,日志格式,输出位置#####################################

python使用logging模块方法 教程

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息:print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出: logging模块的日志级别 logging模块默认定义了以下几个日志等级,它允许开发人员自定义其他日

Python全栈之路----常用模块----logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug()调试, info()记录, warning()有潜在问题, error()出问题 and critical()严重问题5个级别,下面我们看一下怎么用. 最简单用法 import logging logging.warning("user [alex] attempte

Python中logging模块的基本用法

在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 怎样进行日志记录相关配置 日志记录使用常见误区 下面我们来梳理一下整个演讲的过程,其实其核心就是介绍了 logging 模块的使用方法和一些配置. 日志记录的重要性 在开发过程中,如果程序运行出现了问题,我们是可以使用我们自己的 Debug 工具来检测到到底是哪一步出现了问题,如果出现了问题的话,

sys模块 logging模块 序列化模块

一 :sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 二:logging模块 1 函数式简单配置 import logging logging.debug('debug messag