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

python内置模块logging,日志模块

off999 2024-11-23 20:49 32 浏览 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')

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: