python模块之日志模块-logging

python模块之日志模块-logging

logging模块简介:日志的作用、等级和常用函数

1、日志的作用

日志的作用:

  • 程序调试
  • 了解程序运行是否正常
  • 故障分析与问题定位
  • 用户行为分析

2、logging模块简介:日志的等级

  • DEBUG:最详细的日志信息,场景:问题诊断。
  • INFO:通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作。
  • WARNING:当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但此时应用程序还是正常的。
  • ERROR:由于一个更严重的问题导致某些功能不能正常运行时记录的信息。
  • CRITICAL:当发生严重错误,导致应用程序不能继续运行时记录的信息。

3、logging模块简介:日志常用函数

第一种方式是使用logging提供的模块级别的函数

logging模块定义常用函数:

logging.debug(msg,*args,**kwargs) 创建一条严重级别为DEBUG的日志记录
logging.info(msg,*args,**kwargs) 创建一条严重级别为INFO的日志记录
logging.warning(msg,*args,**kwargs) 创建一条严重级别为WARNING的日志记录
logging.error(msg,*args,**kwargs) 创建一条严重级别为ERROR的日志记录
logging.critical(msg,*args,**kwargs) 创建一条严重级别为CRITICAL的日志记录
logging.log(level,*args,**kwargs) 创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs) 对root logger进行一次性配置

第二种方式是使用logging日志系统的四大组件

logger :日志器,提供应用程序代码直接使用的接口
handlers:处理器,用于将日志记录发送到指定的目的位置
filters :过滤器,提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
formatters :格式器,用于控制日志信息的最终输出格式

4、logging模块简介:logging

(1)logging下常用的函数

logger.setLevel() :设置日志等级
logger.addHandler()和logger.removeHandler() :添加和删除一个Handler。
logger.addFilter() :添加一个filter,起过滤作用。
logger.Handler() :Handler基于日志级别对日志进行分发。

Logger 持有日志记录器的方法,日志记录器不直接实例化,而是通过模块级函数 logging.getlogger (name) 来实例化,使用相同的名称多次调用 getLogger() 总是会返回对相同 Logger 对象的引用。
Logger 应用程序代码能直接调用日志接口。
Logger 最常用的操作有两类:配置和发送日志消息。
初始化 logger = logging.getLogger(“endlesscode”),获取 logger 对象,getLogger() 方法后面最好加上所要日志记录的模块名字,配置文件和打印日志格式中的 %(name)s 对应的是这里的模块名字,如果不指定 name 则返回 root 对象
logger.setLevel(logging.DEBUG),Logging 级别 NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL,日志会记录设置级别以上的日志。
多次使用相同的 **name **调用 getLogger 方法返回同一个 logger 对象。
Logger 是一个树形层级结构,在使用接口 debug,info,warn,error,critical 之前必须创建 Logger

实例:
创建方法:创建 Logger 实例后,可以使用以下方法进行日志级别设置,增加处理器 Handler
logger = logging.getLogger(logger_name)
logger.setLevel(logging.ERROR) # 设置日志级别为 ERROR,即只有日志级别大于等于 ERROR 的日志才会输出
logger.addHandler(handler_name) # 为 Logger 实例增加一个处理器
logger.removeHandler(handler_name) # 为 Logger 实例删除一个处理器

(2)format常用格式

%(levelno)s :打印日志级别的数值。
%(levelname)s :打印日志级别的名称。
%(pathname)s :打印当前执行程序的路径,相当于sys.argv[0]。
%(filename)s :打印当前执行程序名。
%(funcName)s :打印日志的当前函数。
%(lineno)d:打印日志的当前行号。
%(asctime)s :打印日志的时间。
%(thread)d :打印线程ID。
%(threadName)s :打印线程名称。
%(process)d :打印进程ID。
%(message)s :打印日志信息。

5、logging.basciConfig()函数说明

image.png
image.png

实例:

import logging
my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d'

logging.basicConfig(
    filename='my.log',
    level= logging.INFO,
    format= my_format
)

logging.info('infor')
logging.debug('debug')
logging.warning('warning')
logging.error('error')
logging.critical('critical')

执行后my.log内容如下:

2023-02-02 08:16:34,391-test.py-test-243
2023-02-02 08:16:34,392-test.py-test-245
2023-02-02 08:16:34,392-test.py-test-246
2023-02-02 08:16:34,392-test.py-test-247

6、logging四大组件详解

logger :日志器,提供应用程序代码直接使用的接口
handlers:处理器,用于将日志记录发送到指定的目的位置
filters :过滤器,提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
formatters :格式器,用于控制日志信息的最终输出格式

示例:

import logging
import logging.handlers
import datetime

logger =logging.getLogger('__name__')#返回的是logger对象,_ _name _ _代表当前py文件名称。
logger.setLevel(logging.DEBUG)

rf_handler =logging.handlers.TimedRotatingFileHandler('all.log',when='midnight',interval=1,backupCount=7,atTime=datetime.time(0,0,0,0))
rf_handler.setFormatter(logging.Formatter(" %(asctime)s-%(levelname)s-%(message)s"))

f_handler = logging.FileHandler('error.log')
f_handler.setLevel(logging.ERROR)
f_handler.setFormatter(logging.Formatter("%(asctime)s-%(filename)s-%(module)s-%(lineno)d"))

logger.addHandler(rf_handler)
logger.addHandler(f_handler)

logger.info('infor0123')
logger.debug('debug0123')
logger.warning('warning0123')
logger.error('error0123')
logger.critical('critical0123')

直接执行如上代码,error.log展示的结果:
2023-02-03 08:25:22,754-test.py-test-268
2023-02-03 08:25:22,754-test.py-test-269

直接执行如上代码,all.log展示的结果:
 2023-02-03 08:28:24,455-INFO-infor0123
 2023-02-03 08:28:24,455-DEBUG-debug0123
 2023-02-03 08:28:24,455-WARNING-warning0123
 2023-02-03 08:28:24,455-ERROR-error0123
 2023-02-03 08:28:24,455-CRITICAL-critical0123
image.png

Handler类


image.png

Handler相关子类:


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容