热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python之logging日志模块详解

logging日志介绍:很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出,

logging日志介绍:
很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等,print也可以输入日志,但是logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息。
日志级别:

  • 1,NOSET 0 等于没写,废话。
  • 2,debug, 10, 调试,一些额外信息,备注,往往和主体功能无关。 日报里面的备注
  • 3,info, 20 主体功能的信息。 日报,做了些啥?
  • 4,warning, 30, 警告, 下次可能要出错了。 交警叔叔警告
  • 5,error, 40, 犯错,违法。抢红灯
  • 6, critical, 50, 极其严重。抢银行
    设置级别:
    当设成 debug 的时候,只有 高于,等于该级别的才会打印。
    当你设成 warning, 只有 warning, error, critical才会打印
    logging日志框架
  • 1, 日志收集器 logger: 日记本
  • 2, 日志收集器级别 level
  • 3, 日志处理器准备 handler, 不同记号的笔
  • 4, 日志处理器级别设置
  • 5, logger.addHandler(hadler),添加到处理器中
  • 6, 设置日志格式 format, 日期:重要程度:分类(工作,生活):内容 fmt = logging.Format()
  • 7, 添加日志处理器, handler.setFormat(fmt)
    代码示例如下:

import logging# 初始化 logger 收集器,给收集器起名为python25 ,默认是root
logger = logging.getLogger('python25')# 设置级别logger.setLevel('DEBUG')# 笔的默认级别是warning, 默认是使用控制台输出。
# 放到一个file 文件当中
handler = logging.FileHandler('log.txt')
# 控制台
console_handler = logging.StreamHandler()# 给控制台设置级别
console_handler.setLevel('DEBUG')# 日志处理器设置级别
handler.setLevel('WARNING')# 添加 handler
logger.addHandler(handler)
logger.addHandler(console_handler)# 为handler 设置格式
fmt = logging.Formatter('%(filename)s-%(lineno)d - %(name)s-%(levelname)s-%(message)s')
handler.setFormatter(fmt)logger.debug('111')
logger.info('hello')
logger.warning('world')
logger.error('ceshi123')
logger.critical('bengkuile23425252')

从代码中可以看出控制台console_handler设置的级别为:debug
控制台输出结果
在这里插入图片描述
输入到log.txt的handler的级别为warning
所以:log.txt为:
在这里插入图片描述
封装logging,logging封装成类
用的时候直接调用 LoggerHandler类的方法即可

import loggingclass LoggerHandler(logging.Logger):def __init__(self, name='root', level='DEBUG', file=None, format='%(filename)s:%(lineno)d:%(name)s:%(levelname)s-%(message)s'):super().__init__(name)#设置级别self.setLevel(level)fmt = logging.Formatter(format)#初始化处理器if file:file_handler = logging.FileHandler(file)file_handler.setLevel(level)file_handler.setFormatter(fmt)self.addHandler(file_handler)stream_handler = logging.StreamHandler()#设置handler的级别stream_handler.setLevel(level)stream_handler.setFormatter(fmt)self.addHandler(stream_handler)


推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
author-avatar
总会有办法的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有