百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python内置模块logging,日志模块

off999 2024-11-23 20:49 24 浏览 0 评论

一、简介

概要:logging 是python 用于记录日志的标准模块

Logging 模块提供了两种日志记录方式:

  1. 一种方式是使用 Logging 提供的模块级别的函数
  2. 另一种方式是使用 Logging 日志系统的四大组件记录

二、使用

import logging

三、日志级别

日志级别等级排序:critical > error > warning > info > debug,级别越高打印的日志越少,默认级别 warning

级别

级别数值(int)

使用时机

DEBUG

10

详细信息

INFO

20

正常运行过程中产生的一些信息

WARNING

30

警告信息,虽然程序正常运行,但有可能发生错误

ERROR

40

运行出错,程序已经不能执行一些功能了

CRITICAL

50

严重错误,程序已经不能正常运行

  1. logging.debug('Python debug') 打印全部的日志
  2. logging.info('Python info') 正常运行过程中产生的一些信息
  3. logging.warning('Python warning') 警告信息
  4. logging.error('Python Error') 错误信息
  5. logging.critical('Python critical') 严重错误信息
  6. logging.basicConfig() 设置 root 的日志级别,和日志输出格式
/**
*level = logging.DEBUG 日志等级
*format='%(levelname)s:%(message)s' 消息格式
*datefmt='%m/%d/%Y %I:%M:%S %p' 日志时间格式
*filename='test.log' 记录日志到文件
*filemode='w' 文件模式
*/
logging.basicConfig(level,format,datefmt,filename,filemode)

# 显示消息时间
logging.basicConfig(format='%(asctime)s %(message)s')
logging.warning('is when this event was logged.')
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
logging.warning('is when this event was logged.')

# 更改显示消息的格式
logging.basicConfig(format='%(levelname)s:%(message)s',level=logging.DEBUG)
logging.debug('Python message format Debug')
logging.info('Python message format Info')
logging.warning('Python message format Warning')
  1. format参数

属性

格式

描述

asctime

%(asctime)s

日志产生的时间,默认格式为msecs2003-07-0816:49:45,896

msecs

%(msecs)d

日志生成时间的亳秒部分

created

%(created)f

time.tme生成的日志创建时间戳

message

%(message)s

具体的日志信息

filename

%(filename)s

生成日志的程序名

name

%(name)s

日志调用者 (日志记录器的名称)

funcname

%(funcName)s

调用日志的函数名

levelname

%(levelname)s

日志级別( DEBUG,INFO, WARNING, 'ERRORCRITICAL)

levene

%( leveling)s

日志级别对应的数值

lineno

%(lineno)d

日志所针对的代码行号(如果可用的话)

module

%( module)s

生成日志的模块名

pathname

%( pathname)s

生成日志的文件的完整路径

process

% (process)d

生成日志的进程D(如果可用)

processname

%(processname)s

进程名(如果可用)

thread

%(thread)d

生成日志的线程D(如果可用)

relativeCreated

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

threadname

%( threadname)s

线程名(如果可用)

四、四大组件

  1. 日志器- Logger:logging.getLogger(logger_name),返回Logger 对象
  • logger.setLevel(logging.ERROR) 设置处理器的日志级别
  • logger.addHandler(handler_name) 增加一个处理器
  • logger.removeHandler(handler_name) 删除一个处理器
  • logger.addHandler((filter) 给处理器统一设置过滤器
  • logger.removeFilter((filter) 移除过滤器
import logging

logger = logging.getLogger()

logger.setLevel(logging.DEBUG)

logger.info('Python info') #不会打印,因为logger.setLevel设置的是处理器日志级别
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
  1. 处理器- Handler:处理器 将记录器产生的日志发送至指定的目的地,如:日志输出的位置,比如输出到本地文件,控制台,或者发送至Email
  • logging.StreamHandler(stream=None) 用于把日志信息输出控制台
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)

logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
  • logging.FileHandler(fineName=None) 用于把日志信息输出成文件
import logging

logger = logging.getLogger()
logger.setLevel(logging.WARNING)
file_handler= logging.FileHandler('test.log')
logger.addHandler(file_handler)

logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
  • logging.NullHandler(stream=None) 没有配置其他日志处理程序时使用,避免出现“无处理程序”的警告或错误,它会忽略所有传递给它的日志记录事件,因此不会将日志记录到任何地方
  • handler.setLevel(logging.WARN) 指定日志级别
  • handler.setFormatter(format) 设置日志格式
  • handler.addFilter((filter) 增加一个过滤器,可以增加多个
  • handler.removeFilter(filter) 删除一个过滤器
  1. 过滤器- Filter:过滤日志
  • logging.Filter(name='') name=日志器name
import logging

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

filter = logging.Filter(name='logger')
filter1 = logging.Filter(name='logger1')

stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
stream_handler.addFilter(filter)

file_handler = logging.FileHandler('test.log')
logger.addHandler(file_handler)
file_handler.addFilter(filter1) #test.log 中不会有日志信息

logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
  1. 格式器- Formatter:格式器:指定最终输出中日志记录的格式
  • logging.Formatter(fmt=None, datefmt=None) fmt日志格式同basicConfig中的format,datefmt日期格式打印日期时此参数生效
import logging

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

stream_handler_format = logging.Formatter('%(levelname)s %(asctime)s %(message)s',datefmt='%Y/%m/%d %H:%M:%S')
stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
stream_handler.setFormatter(stream_handler_format )

file_handler_format = logging.Formatter('%(levelname)s %(message)s',datefmt='%Y/%m/%d %H:%M:%S')
file_handler = logging.FileHandler('test.log') # file_handler_format中虽然设置了日期格式,日志格式中并没有打印日期,所以datefmt不会生效
logger.addHandler(file_handler)
file_handler.setFormatter(file_handler_format)

logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')
  1. 自定义过滤函数
import logging

class Filter(logging.Filter):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def filter(self, record):
        print('日志名称:',record.name)
        print('日志等级名称:', record.levelname)
        print('日志等级号:', record.levelno) #logging.DEBUG
        print('日志执行文件名:', record.filename)
        print('日志message:', record.msg)
        print('日志参数:', record.args)
        print('日志创建时间戳:', record.created)
        print('日志执行文件路径', record.pathname)
        print('日志进程ID', record.process)
        print('日志进程名字', record.processName)
        return True if self.name == 'streamHandle' else False #控制是否打印日志条件


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

filter = logging.Filter(name='logger')
filter1 = logging.Filter(name='logger1')

stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
stream_handler.addFilter(Filter('streamHandle'))

file_handler = logging.FileHandler('test.log')
logger.addHandler(file_handler)
file_handler.addFilter(Filter('fileHandler')) #test.log 中不会有日志信息

logger.debug('Python debug')
logger.info('Python info')
logger.warning('Python warning')
logger.error('Python Error')
logger.critical('Python critical')

五、配置日志

  1. logging.conf 配置文件
  • [loggers]:指定了所有日志器(logger)的名称
  • [handlers]:指定了所有处理器(handler)的名称
  • [formatters]:指定了所有格式化器(formatter)的名称
  • [logger_]:为每个日志器指定级别、处理器和其他属性
  • [handler_]:为每个处理器指定类、级别、格式化器等
  • [formatter_]:为每个格式化器指定格式和日期格式

[loggers]
keys=root,simpleHandler,fileHandler #loggers名称集合,logging.getLogger 中的name参数,默认root

[handlers]
keys=printSimpleHandler,printFileHandler #处理器名称集合

[formatters]
keys=simpleFormatter,fileFormatter #日志格式化名称集合

[logger_root] # loggers=root日志配置
level=DEBUG #日志等级
handlers=printSimpleHandler,printFileHandler #该日志下运行的处理器

[logger_simpleHandler] # loggers=simpleHandler日志配置
level=DEBUG #日志等级
handlers=printSimpleHandler #该日志下运行的处理器
qualname=simpleHandler
propagate=0 #日志记录器的传播设置。

[logger_fileHandler] # loggers=fileHandler日志配置
level=DEBUG #日志等级
handlers=printFileHandler #该日志下运行的处理器
qualname=fileHandler
propagate=0

[formatter_simpleFormatter] # formatters=simpleFormatter日志格式配置
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s #日志格式
datefmt=%Y/%m/%d %H:%M:%S #日期格式

[formatter_fileFormatter] # formatters=fileFormatter日志格式配置
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s #日志格式
datefmt=%Y-%m-%d %H:%M:%S #日期格式

[handler_printSimpleHandler] # handlers=printSimpleHandler处理器配置
class=StreamHandler #指定处理器,等同于logging.StreamHandler
level=DEBUG #指定日志级别
formatter=simpleFormatter #指定日志格式
args=(sys.stdout,) #处理器参数

[handler_printFileHandler] # handlers=printFileHandler处理器配置
class=FileHandler #指定处理器,等同于logging.FileHandler
level=DEBUG #指定日志级别
formatter=fileFormatter #指定日志格式
args=('test.log',) #处理器参数


  1. logging.config.fileConfig()
import logging.config
import logging

logging.config.fileConfig(fname='logging.conf')

root_logger = logging.getLogger()

simple_handle_logger = logging.getLogger('simpleHandler')

file_handler_logger = logging.getLogger('fileHandler')

def run_log(logger):
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warn message')
    logger.error('error message')
    logger.critical('critical message')

run_log(root_logger)
run_log(simple_handle_logger)
run_log(file_handler_logger)
  1. logging.config.dictConfig() 日志配置,与logging.config.fileConfig()区别在于,logging.config.fileConfig()读取的是文件,logging.config.dictConfig用的是字典,把logging.conf 配置文件以字典形式配置,logging.config.dictConfig即可

六、其他方法属性

  1. logging.LoggerAdapter(logger, extra=None):添加额外的上下文信息,返回logger对象
import logging

logger = logging.getLogger()


loggers = logging.LoggerAdapter(logger, {"spider": '2131'})
stream_handler_format  = logging.Formatter('%(levelname)s %(asctime)s %(message)s %(spider)s',datefmt='%Y/%m/%d %H:%M:%S')

stream_handler = logging.StreamHandler()
logger.addHandler(stream_handler)
stream_handler.setFormatter(stream_handler_format )

loggers.warning('Python warning')
loggers.error('Python Error')
loggers.critical('Python critical')

相关推荐

手机cpu排名一览表(手机cpu排名前十)

第一名:苹果:A151、A15Bionic采用4颗效率核心+2颗性能核心的组合,搭配4核心GPU,集成85亿个晶体管,性能提升了大约20%。2、苹果称其为“智能手机中最快的CPU”,有着“智能手机...

系统补丁怎么安装(系统补丁在哪)

1成后,需要打sp1补丁,不过微软对win7的支持已经结束了,建议升级新系统2到微软官网/zh-cn/download找到win7系统版本的补丁,点击下载3勾选对应系统版本4确认无误后,点击Next5...

win10命令行窗口怎么打开(window10命令行窗口)

调出运行命令的方法如下1:同时按下win+R,在打开的运行对话框中输入:cmd后,回车打开。2:也可以在同时按下win+x,或者“开始”菜单上右键,在弹出菜单上选择“命令行提示符”或“命令提示符(管理...

windows7屏幕亮度怎么调整(windows7屏幕亮度调节)

windows7屏幕亮度调节方法如下1.鼠标右键桌面空白处,在弹出的菜单中选择【个性化】。2.进入属性界面,选择左下角的【显示】选项。3.在弹出的显示页面右侧点击【调整亮度】。4.进入调整亮度页面,下...

永久删除的视频怎么找回(怎么恢复永久删除的视频)
  • 永久删除的视频怎么找回(怎么恢复永久删除的视频)
  • 永久删除的视频怎么找回(怎么恢复永久删除的视频)
  • 永久删除的视频怎么找回(怎么恢复永久删除的视频)
  • 永久删除的视频怎么找回(怎么恢复永久删除的视频)
xpsp2系统下载地址(windows xp sp2 iso)

WindowsXPProfessionalSP2产品密钥是微软公司的一个软件密钥,用于授权用户使用该软件的完整功能。它通常与产品许可证一起使用,用于确保软件的合法性和安全性。使用Windows...

开机microsoft登录不上

1、系统问题:如果系统版本比较低,可能会由于旧系统存在某些BUG未修复或业务功能未优化,使手机在使用APP等应用过程中出现卡的情况,建议更新到最新的ios系统使用。2、内存问题:如果内存比较小,在运行...

如何取消win10开机密码(如何取消win10开机密码账户登录)

取消Windows10的开机密码可以通过以下方法进行操作:方法一:使用用户账户设置1.打开“开始”菜单,点击“设置”图标。2.在设置窗口中,点击“帐户”选项。3.在左侧菜单中,选择“登录选项”。4....

免费解压文件的软件(免费解压文件的软件电脑)

1、快压快压(kuaizip)是一款非常流氓的压缩和解压缩软件,一款免费、方便、快速的压缩和解压缩利器,拥有一流的压缩技术,是国内第一款具备自主压缩格式的软件。快压自身的压缩格式KZ具有超大的压缩比和...

无线usb网卡插上去没有反应(为什么usb无线网卡插上去没反应)

当出现电脑无法识别无线网卡的情况时,是简单的方法就是将无线USB网卡插到电脑后置USB接口上,以保证供电的充足。当然如果是偶然出现无法识别的情况,建议重启一下电脑试试。启用USB无线网卡驱动:右击“计...

怎么登录自己家的路由器(怎么登录自己家的路由器账号)

登陆家里的路由器方法:1、先查看ip,方法:win+r---输入:cmd---在再黑白界面输入:ipconfig,按回车。2、根据网关查看路由器地址。若网关是:192.168.2.1,那么路由器的ip...

linux操作系统安装步骤(linux系统详细安装步骤)

1.选择“中文(简体)”,然后点击“安装Ubuntu”。2.点击“继续”。3.然后点击“现在安装”。4.选择地址的时区,然后点击“继续”。5.选择“汉语”,然后点击“继续”。6.输入用户的名字。7.设...

苹果手机怎么设置定时关机(苹果手机怎么设置定时关机重启)

苹果手机可以设置定时关机,但无法设置定时开机。具体操作步骤如下:进入苹果手机自带的时钟。点击屏幕有下角的计时器。点击画面中间的计时结束启用选项。选择画面最下方的“停止播放”。之后再点击画面右上角的设定...

无线网wifi密码忘记了怎么办

忘记wifi密码后,可以在路由器后台查看。1.在浏览器的地址栏中,输入路由器上的管理地址,进入后台界面;2.在后台界面里,找到“无线设置”选项,点击它;3.在新界面里,点击wifi密码右侧的小眼睛图标...

win7系统无法正常开机怎么办
win7系统无法正常开机怎么办

解决方法如下1,出现无法启动的原因,要注意是开机启动不了,还是在进度条那里缓冲,过不去.如果是开机启动不了,那就要看一下内存条、电源等有没有问题?如果是在进度条那里,那就看下方的三种方法。2,第一种方法:1,开机按F8键.2,选择最近一次的...

2025-11-16 07:51 off999

取消回复欢迎 发表评论: