logging模块记日志

news/2024/11/8 19:46:37/文章来源:https://www.cnblogs.com/rolandhe/p/18535790

在python程序中,我们一般使用logging模块来记录日志。

简单模式: 我们可以直接使用logging.info()这种方式记日志。

import logginglogging.basicConfig(filename='execution.log', format='%(asctime)s - %(levelname)s - %(message)s', encoding='utf-8', level=logging.INFO)
logging.info('这是我写的日志')

常用模式: 通常我们可能需要日志在记录到文件的同时也输出到控制台。又或者,我们可能需要区别于日志的来源,即可能由不同的模块记录的,这时我们使用logger.info()来记日志。
多个logger可以是继承关系。 所以logger都会默认继承自root logger。 指定名称的logger会按照点分隔符来控制继承链。 名称举例: myproject.settings -> myproject。
logger可能通过setLevel()方法来控制记录的日志级别,达到级别的日志会传递给handler。logger的默认日志级别是logging.WARNING。 同时handler也可以设置自己的日志级别,达到级别的日志才会最终被记录。 handler默认的日志级别是logging.DEBUG。formatter是控制日志输出格式,它需要被添加到handler上才起作用。
前面讲的logging.basicConfig方法相当于给root logger做了配置。

import logging# 为了将日志即能输出到日志文件,又能输出到控制台,采用单独创建logger,并附加handler的方式。
logger = logging.getLogger()  # 不加参数,以获取root logger
logger.setLevel(LOG_LEVEL)  # 设置日志级别。 默认是warning
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(process)d - %(message)s') # 设置日志输出格式, 增加进程id,为区分多进程并行处理
# handler不设置日志级别时,会将logger传给它的所有级别的日志都输出,而不是默认只输出warning级别
ch = logging.StreamHandler()  # 创建控制台handler
ch.setFormatter(formatter)
fh = logging.FileHandler(filename=os.path.join(BASE_DIR, 'execution.log'), encoding='utf-8')
fh.setFormatter(formatter)
logger.addHandler(ch)
logger.addHandler(fh)
# 设置完root logger后,将logger变量指向当前模块名的logger,但其会自动继承root logger的配置
logger = logging.getLogger('main')logger.info('这是main模块中的日志')

其他模块中

import logging
# logger会自动继承root logger中的配置,包括handler, formatter, log level等。
logger = logging.getLogger(__name__)
logger.info('这是其他模块中的日志')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/828986.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进销存系统是什么?企业如何用好进销存系统?

很多老板都知道,面对激烈的竞争环境,进销存管理已经成为企业运营中不可或缺的一部分。无论是商品的采购、销售,还是库存管理,进销存系统的有效运作都直接影响着企业的资金流动、客户满意度以及市场竞争力。因此,如何高效地应用进销存管理系统,不仅关乎日常运营的顺畅,更…

【linux内核】 BCC Tools命令汇总

什么是BCC Tools 直接通过BPF指令编写BPF 程序是非常繁琐的事情,尤其对于运维人员来说,花70%的时间来编写一个BPF程序来实现一个检查点,不如花70%的时间来熟悉别人已经写好的BPF程序,并且把别人的BPF程序有效的串联起来形成自己分析问题的套路,等有了闲暇时间再去尝试突破…

20222311 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1. 实验内容 1.1恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具; (2)使用…

进销存系统怎么实施?进销存的实施流程解析

很多老板都知道,企业的日常运营中,进销存管理是至关重要的核心环节之一。它涉及到企业的采购、库存、销售等多个方面,直接影响企业的资金流动、库存控制及客户满意度。因此,如何有效实施进销存管理系统,已成为许多企业提升运营效率、降低成本、优化资源配置的重要任务。 随…

解决centos7.9镜像问题

解决方案 https://wiki.bafangwy.com/doc/719/ 安装chrome(https://www.cnblogs.com/zxqblogrecord/p/13171516.html)时出现以下问题: failure: repodata/repomd.xml from centos7: [Errno 256] No more mirrors to try. http://mirror.centos.org/centos/7/os/x86_64/repodat…

【IDEA】IntelliJ IDEA远程开发:释放本地设备,打破资源与环境的限制

IDEA的远程开发 (Remote Development) 是指在不依赖于本地计算资源的情况下,通过连接远程服务器或虚拟机来进行代码编写、调试和构建的开发模式。这种方式主要通过 JetBrains Gateway 和 JetBrains Projector 提供支持,可以在本地 IDE 界面与远程环境紧密协作,帮助开发者解决…

有哪些免费的轻量级在线 CRM 系统?6款CRM系统盘点

对于许多中小型企业和初创公司而言,如何选择一款既能满足日常需求又具性价比的CRM系统很重要。通常来说,系统的成本是企业选型过程中不可忽视的因素,但在这么多的CRM系统中,各类CRM系统的功能与价格对比真的很容易让人眼花缭乱。 本文将盘6款值得关注的免费轻量级在线CRM系…

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 打开文件发现提示信息“备份文件”,查看源码并未发现其他有效信息采用dirsearch爆破目录,找到www.zip文件解压zip,发现是源码泄露提交flag,发现不正确,看到index.php源码中有Get传参,然后反序列化函数unserialize(),判断为反序列化漏洞;查看class…

【IDEA】告别繁琐反编译:IDEA中轻松反编译与修改Jar包

本文带你了解 JarEditor 插件的强大功能,它让你无语再用其他第三方工具,也无需解压 JAR 文件就能直接在IDEA中编辑其中的类和资源文件。还能用它轻松添加、删除或重命名 JAR 包里的文件。即使遇到混淆过的 JAR,JarEditor 也能通过 Javassist 工具搞定。 支持的功能 JarEdito…

[极客大挑战 2019]BuyFlag 1

[极客大挑战 2019]BuyFlag 1 打开实例发现pay.php页面,有提示信息打开源码发现password post提交逻辑burpsuite抓包传参,传入money和password参数,这里password是==弱比较,所以加个字符就可以绕过 password=404a&money=100000000回显发现并没有变化 注意到学生需要CUIT(…