最新要闻
- 天天最资讯丨有信免费电话使用攻略_有信怎么使用 免费
- 七夕 我们分手
- 微资讯!自带散热泵!一加推出45W液冷散热背夹:最高可降20℃
- 倒计时两分钟!SpaceX载人火箭发射最后关头被紧急叫停
- 世界资讯:七彩虹战戟CN700 1TB SSD评测:国产方案7.1GB/s读取、499元最香
- GTX 750 Ti挑战大热单机:画面不忍直视
- 【热闻】“狗”气越来越足!第二代哈弗大狗正式上市:13.58万元起
- 最新消息:不怕被坑了!工信部出手:自动续费前5日应以显著方式提醒
- 1999元 极米Play 2投影仪上架:120寸大屏、Type-C供电
- 【世界时快讯】3D大颗粒 杰士邦特惠装30支:19.9元秒杀
- 异形方向盘有隐患吗?汽车博主:既不方便也不安全
- 全球微头条丨照坏了手机的激光雷达:会照瞎你的眼吗?
- 全球第一大癌!39岁女儿与67岁父亲先后确诊乳腺癌
- 世界微速讯:电动自行车电池容量正常但里程不足?5招教你解决
- 环球讯息:延迟骤降50%:魅族20系列首发游戏模式6.0
- 热文:秒独显的3GHz高频缩水 AMD锐龙7000HS上市前又挨一刀
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前热议!Python中logging模块用法
【资料图】
一、低配logging
日志总共分为以下五个级别,这个五个级别自下而上进行匹配 debug-->info-->warning-->error-->critical,默认最低级别为warning级别。
1.v1
import logginglogging.debug("调试信息")logging.info("正常信息")logging.warning("警告信息")logging.error("报错信息")logging.critical("严重错误信息")
WARNING:root:警告信息ERROR:root:报错信息CRITICAL:root:严重错误信息
v1版本无法指定日志的级别;无法指定日志的格式;只能往屏幕打印,无法写入文件。因此可以改成下述的代码。
2.v2
import logging# 日志的基本配置logging.basicConfig(filename="access.log", format="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S %p", level=10)logging.debug("调试信息") # 10logging.info("正常信息") # 20logging.warning("警告信息") # 30logging.error("报错信息") # 40logging.critical("严重错误信息") # 50
可在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
- filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
- filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
- format:指定handler使用的日志显示格式。
- datefmt:指定日期时间格式。
- level:设置rootlogger(后边会讲解具体概念)的日志级别
- stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
format参数中可能用到的格式化串:
- %(name)s Logger的名字
- %(levelno)s 数字形式的日志级别
- %(levelname)s 文本形式的日志级别
- %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
- %(filename)s 调用日志输出函数的模块的文件名
- %(module)s 调用日志输出函数的模块名
- %(funcName)s 调用日志输出函数的函数名
- %(lineno)d 调用日志输出函数的语句所在的代码行
- %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
- %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
- %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
- %(thread)d 线程ID。可能没有
- %(threadName)s 线程名。可能没有
- %(process)d 进程ID。可能没有
- %(message)s用户输出的消息
v2版本不能指定字符编码;只能往文件中打印。
3.v3
logging模块包含四种角色:logger、Filter、Formatter对象、Handler
- logger:产生日志的对象
- Filter:过滤日志的对象
- Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
- Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
"""critical=50error =40warning =30info = 20debug =10"""import logging# 1、logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出logger = logging.getLogger(__file__)# 2、Filter对象:不常用,略# 3、Handler对象:接收logger传来的日志,然后控制输出h1 = logging.FileHandler("t1.log") # 打印到文件h2 = logging.FileHandler("t2.log") # 打印到文件sm = logging.StreamHandler() # 打印到终端# 4、Formatter对象:日志格式formmater1 = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S %p",)formmater2 = logging.Formatter("%(asctime)s : %(message)s", datefmt="%Y-%m-%d %H:%M:%S %p",)formmater3 = logging.Formatter("%(name)s %(message)s",)# 5、为Handler对象绑定格式h1.setFormatter(formmater1)h2.setFormatter(formmater2)sm.setFormatter(formmater3)# 6、将Handler添加给logger并设置日志级别logger.addHandler(h1)logger.addHandler(h2)logger.addHandler(sm)# 设置日志级别,可以在两个关卡进行设置logger与handler# logger是第一级过滤,然后才能到handlerlogger.setLevel(30)h1.setLevel(10)h2.setLevel(10)sm.setLevel(10)# 7、测试logger.debug("debug")logger.info("info")logger.warning("warning")logger.error("error")logger.critical("critical")
二、高配logging
1.配置日志文件
以上三个版本的日志只是为了引出我们下面的日志配置文件
import osimport logging.config# 定义三种日志输出格式 开始standard_format = "[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]" \ "[%(levelname)s][%(message)s]" # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行simple_format = "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s"id_simple_format = "[%(levelname)s][%(asctime)s] %(message)s"# 定义日志输出格式 结束logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # log文件的目录,需要自定义文件路径 # atmlogfile_dir = os.path.join(logfile_dir, "log") # C:\Users\oldboy\Desktop\atm\loglogfile_name = "log.log" # log文件名,需要自定义路径名# 如果不存在定义的日志目录就创建一个if not os.path.isdir(logfile_dir): # C:\Users\oldboy\Desktop\atm\log os.mkdir(logfile_dir)# log文件的全路径logfile_path = os.path.join(logfile_dir, logfile_name) # C:\Users\oldboy\Desktop\atm\log\log.log# 定义日志路径 结束# log配置字典LOGGING_DIC = { "version": 1, "disable_existing_loggers": False, "formatters": { "standard": { "format": standard_format }, "simple": { "format": simple_format }, }, "filters": {}, # filter可以不定义 "handlers": { # 打印到终端的日志 "console": { "level": "DEBUG", "class": "logging.StreamHandler", # 打印到屏幕 "formatter": "simple" }, # 打印到文件的日志,收集info及以上的日志 "default": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", # 保存到文件 "formatter": "standard", "filename": logfile_path, # 日志文件 "maxBytes": 1024 * 1024 * 5, # 日志大小 5M (*****) "backupCount": 5, "encoding": "utf-8", # 日志文件的编码,再也不用担心中文log乱码了 }, }, "loggers": { # logging.getLogger(__name__)拿到的logger配置。如果""设置为固定值logger1,则下次导入必须设置成logging.getLogger("logger1") "": { # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 "handlers": ["default", "console"], "level": "DEBUG", "propagate": False, # 向上(更高level的logger)传递 }, },}def load_my_logging_cfg(): logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置 logger = logging.getLogger(__name__) # 生成一个log实例 logger.info("It works!") # 记录该文件的运行状态 return loggerif __name__ == "__main__": load_my_logging_cfg()
2.使用日志
import timeimport loggingimport my_logging # 导入自定义的logging配置logger = logging.getLogger(__name__) # 生成logger实例def demo(): logger.debug("start range... time:{}".format(time.time())) logger.info("中文测试开始。。。") for i in range(10): logger.debug("i:{}".format(i)) time.sleep(0.2) else: logger.debug("over range... time:{}".format(time.time())) logger.info("中文测试结束。。。")if __name__ == "__main__": my_logging.load_my_logging_cfg() # 在你程序文件的入口加载自定义logging配置 demo()
三、Django日志配置文件
# logging_config.py# 学习中遇到问题没人解答?小编创建了一个Python学习交流群:489111204 LOGGING = { "version": 1, "disable_existing_loggers": False, "formatters": { "standard": { "format": "[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]" "[%(levelname)s][%(message)s]" }, "simple": { "format": "[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s" }, "collect": { "format": "%(message)s" } }, "filters": { "require_debug_true": { "()": "django.utils.log.RequireDebugTrue", }, }, "handlers": { # 打印到终端的日志 "console": { "level": "DEBUG", "filters": ["require_debug_true"], "class": "logging.StreamHandler", "formatter": "simple" }, # 打印到文件的日志,收集info及以上的日志 "default": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自动切 "filename": os.path.join(BASE_LOG_DIR, "xxx_info.log"), # 日志文件 "maxBytes": 1024 * 1024 * 5, # 日志大小 5M "backupCount": 3, "formatter": "standard", "encoding": "utf-8", }, # 打印到文件的日志:收集错误及以上的日志 "error": { "level": "ERROR", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自动切 "filename": os.path.join(BASE_LOG_DIR, "xxx_err.log"), # 日志文件 "maxBytes": 1024 * 1024 * 5, # 日志大小 5M "backupCount": 5, "formatter": "standard", "encoding": "utf-8", }, # 打印到文件的日志 "collect": { "level": "INFO", "class": "logging.handlers.RotatingFileHandler", # 保存到文件,自动切 "filename": os.path.join(BASE_LOG_DIR, "xxx_collect.log"), "maxBytes": 1024 * 1024 * 5, # 日志大小 5M "backupCount": 5, "formatter": "collect", "encoding": "utf-8" } }, "loggers": { # logging.getLogger(__name__)拿到的logger配置 "": { "handlers": ["default", "console", "error"], "level": "DEBUG", "propagate": True, }, # logging.getLogger("collect")拿到的logger配置 "collect": { "handlers": ["console", "collect"], "level": "INFO", } },}# -----------# 用法:拿到俩个loggerlogger = logging.getLogger(__name__) # 线上正常的日志collect_logger = logging.getLogger("collect") # 领导说,需要为领导们单独定制领导们看的日志
当前热议!Python中logging模块用法
世界滚动:C语言程序设计
天天最资讯丨有信免费电话使用攻略_有信怎么使用 免费
七夕 我们分手
微资讯!自带散热泵!一加推出45W液冷散热背夹:最高可降20℃
倒计时两分钟!SpaceX载人火箭发射最后关头被紧急叫停
世界资讯:七彩虹战戟CN700 1TB SSD评测:国产方案7.1GB/s读取、499元最香
GTX 750 Ti挑战大热单机:画面不忍直视
【热闻】“狗”气越来越足!第二代哈弗大狗正式上市:13.58万元起
【天天新视野】关于Ajax
路飞项目封装logger、response以及全局异常
最新消息:不怕被坑了!工信部出手:自动续费前5日应以显著方式提醒
1999元 极米Play 2投影仪上架:120寸大屏、Type-C供电
【世界时快讯】3D大颗粒 杰士邦特惠装30支:19.9元秒杀
异形方向盘有隐患吗?汽车博主:既不方便也不安全
从银行数字化转型来聊一聊,火山引擎 VeDI 旗下 ByteHouse 的应用场景
今日热讯:第123篇: JS函数属性与方法
Prometheus配置Alertmanager(钉钉告警)
全球微头条丨照坏了手机的激光雷达:会照瞎你的眼吗?
全球第一大癌!39岁女儿与67岁父亲先后确诊乳腺癌
世界微速讯:电动自行车电池容量正常但里程不足?5招教你解决
环球讯息:延迟骤降50%:魅族20系列首发游戏模式6.0
热文:秒独显的3GHz高频缩水 AMD锐龙7000HS上市前又挨一刀
房贷60万20年和30年利息差多少?两种还款方式利息对比
当前视点!WHAT IS PPM Encoder ?
焦点速递!记录--关于无感刷新Token,我是这样子做的
热点!如何使用appuploader制作apple证书
世界热资讯!JMeter的基础认识
【环球热闻】3月1日广东男篮主场见 威姆斯晒登机照:回家
【天天报资讯】Redis 缓存过期策略和内存淘汰策略
环球热头条丨【复盘】搭建日志平台的复盘与思考
天天微动态丨sed命令的使用(替换)
环球实时:软件工程阅读笔记
Android ADB 备忘清单_开发速查表分享
焦点资讯:美国高中地下发现加密货币矿场 7个月耗电费12万元
直屏手机为何越来越多了?原因有三个
新资讯:近250家公司用ChatGPT取代员工:过半考核优秀 能省10万美元
环球滚动:诺基亚60年首次更换Logo后:手机品牌继续沿用经典蓝底Logo
环球快报:比老司机还稳!特斯拉主动安全压线避让变道前车:车主惊叹
天天头条:三睾拟双身虫
Prometheus插件安装(mysql_exporter)
消息!河南农信社数字化转型实践方案
今日讯!剑指 Offer 55 - I. 二叉树的深度(java解题)
世界新动态:八代将军吉宗下载_八代将军吉宗
女子驾奇瑞小蚂蚁 高速上油门到底车速为0!4S店:退款退车
世界速看:暴雪联合时尚品牌推出《暗黑4》主题女装:这画风太诡异了
焦点播报:董明珠:格力员工一人一套房承诺不变
个人私生活被恶搞辣眼?董明珠:有些自媒体为了赚钱不择手段 低级下流无聊
一文看懂小米无线AR眼镜探索版:自研微手势 隔空就能刷抖音
数据结构刷题2023.02.27小记
天天即时看!Ubuntu-深度学习环境搭建(yolov3)
焦点滚动:学习swoole之前,你需要知道的几件事
世界看热讯:流氓APP再见!26条新规严管移动应用:不得欺骗误导用户
Win11 22H2“Moment 2”更新快了:将在未来几周推送
每日讯息!男子醉驾被查也不让新手妻子开车:为了不要出现更大的事故
【全球新要闻】为迎接中国游客!韩国旅游业也是拼了:推中文菜单、背汉语、招募中文职员
手一抖被迫看广告!工信部通知:禁止高灵敏度“摇一摇”
当前资讯!宜兴购房补贴本科生可以申请吗?
焦点关注:ChatGPT的隐私安全问题及隐私保护技术
无关风月是什么意思?无关风月我题序等你回是什么歌?
小盆友是什么意思?小盆友生日祝福成语有哪些?
这款MOD可以让《原子之心》双子舞伶露脸:好看吗?
天天播报:中兴发布小方糖路由器:双千兆设计 首发99元
考验信仰、财力的时候到了!丰田加价神车新一代埃尔法曝光
13代酷睿CPU热卖 Intel承诺员工薪酬会涨回来:基本工资100%满血
每日消息!形似比亚迪仰望U8 奇瑞捷途旅行者官图发布:保时捷前总监操刀
电视剧红狐荣乡君是什么人?红狐电视剧演员表介绍
刻在我心底的名字是哪部电影的主题曲?刻在我心底的名字歌词是什么?
win7快速启动栏在哪里?win7快速启动栏怎么使用?
东芝ac100怎样刷系统?东芝ac100安卓笔记本多少钱?
超长待机智能手机有哪些?超长待机智能手机排行榜
三星GALAXY i5700什么时候上市的?三星GALAXY i5700怎么关机?
世界热头条丨谷歌邮箱注册
环球观察:Prometheus插件安装(NodeExporter)
焦点热讯:Redis高频面试题总结
速读:财政部:截至1月末,全国地方政府债务余额357018亿元
聚焦:威马员工在线讨薪 吉利副总裁:我这里缺人、可以考虑下
全球看点:一箱油续航轻松破千公里 五菱凯捷混动铂金版上市:12.98万起
摩托罗拉rizr纵向卷轴屏手机亮相:屏幕可伸长
国内能买到!ZERO SR-X概念电动摩托发布:110马力、能跑300公里
当前关注:送冰极洁面霜:妮维雅男士控油补水洗面奶24.9元大促
天天热推荐:Mysql 自定义目录安装
世界资讯:武汉Java培训班哪家好?大家都要怎么挑选
全球速看:SQL行转列、列转行(SQL Server版)
世界视点!南京Java培训班哪家好,什么样的可选
什么是潮吹
担心的事儿发生了:已有企业在用ChatGPT取代员工
每日热门:iPhone 15 Pro Max与14 Pro Max对比:明显更厚了!妥妥半斤机
纳智捷当街加油 车主现身说法:从郑州到广州加了5次
环球速递!半价大促:五芳斋豆沙青团6枚9.9元发车 清甜绵软
全球最早上映!任天堂《超级马力欧兄弟》大电影内地定档4月5日
世界最新:总结SpringBoot1.x迁移到2.x需要注意的问题
全球短讯!Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
代理设计模式还不会?2分钟搞定
【世界报资讯】河南省通许县:“中国酸辣粉之都”正式揭牌
天天热门:微信下重拳:上万个群被封杀 此类行为千万别做
环球微头条丨程序员20年喝近2吨可乐屡患结石 几乎天天喝
联想推ThinkPad Z16 Gen 2笔记本:锐龙7000系列 可选4K+屏
双子姐妹、冰箱很带感 《原子之心》游戏已被破解:俄罗斯自己黑客干的
还敢生吃?日本即将核污水倒入大海 降低水产品氚活度分析精度