Python编程:logging模块的简单使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Python编程:logging模块的简单使用

日志级别(5个等级),从低到高分别是:


DEBUG

INFO

WARNING

ERROR

CRITICAL

日志输出:


控制台日志

文件日志

logging 中的几个概念:


Logger:日志记录器,是应用程序中可以直接使用的接口。

Handler:日志处理器,用以表明将日志保存到什么地方以及保存多久。

Formatter:格式化,用以配置日志的输出格式。

上述三者的关系是:一个 Logger 使用一个 Handler,一个 Handler 使用一个 Formatter。


输出到控制台

默认输出级别为WARNING

import logging
logging.info("info")
logging.debug("debug")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
"""
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
"""

输出到文件

import logging
filename = "{}.log".format(__file__)
fmt = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
logging.basicConfig(
    level=logging.DEBUG,
    filename=filename,
    filemode="w",
    format=fmt
)
logging.info("info")
logging.debug("debug")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

打开日志文件

2018-06-21 14:32:29,904 - logging_demo.py[line:26] - INFO: info
2018-06-21 14:32:29,905 - logging_demo.py[line:27] - DEBUG: debug
2018-06-21 14:32:29,905 - logging_demo.py[line:28] - WARNING: warning
2018-06-21 14:32:29,905 - logging_demo.py[line:29] - ERROR: error
2018-06-21 14:32:29,905 - logging_demo.py[line:30] - CRITICAL: critical

常用参数

format: 日志格式 
  eg: "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
datefmt:日志时间显示 
  eg: "%Y-%m-%d %H:%M:%S"

同时输出到控制台和文件

import logging
# 创建logger对象
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # log等级总开关
# log输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
# 控制台handler
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO) # log等级的开关
stream_handler.setFormatter(formatter)
# 文件handler
file_handler = logging.FileHandler("logging.log")
file_handler.setLevel(logging.WARNING) # log等级的开关
file_handler.setFormatter(formatter)
# 添加到logger
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
# 输出日志
logger.info("info")
logger.debug("debug")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

日志格式

%(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: 打印日志信息

从配置文件读取日志配置

logging.conf

[loggers]
keys = root
[handlers]
keys = logfile
[formatters]
keys = generic
[logger_root]
handlers = logfile
[handler_logfile]
class = handlers.TimedRotatingFileHandler
args = ('test.log', 'midnight', 1, 10)
level = DEBUG
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s
import logging
import logging.config
logging.config.fileConfig('logging.conf')
logging.debug('debug message')
logging.info("info message")
logging.warn('warn message')
logging.error("error message")
logging.critical('critical message')

执行效果test.log

2018-10-27 09:50:13,064 WARNI [root:13] warn message
2018-10-27 09:50:13,065 ERROR [root:14] error message
2018-10-27 09:50:13,065 CRITI [root:15] critical message

参考

  1. Python中的logging模块
  2. python logging 日志使用
  3. 16.6. logging — Logging facility for Python¶
  4. 所有 Python 程序员必须要学会的「日志」记录
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Web App开发 数据采集 C#
解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
本文是一份实战指南,主要介绍了在使用Selenium和C#进行网页抓取时,如何设置代理服务器的身份验证以避免自动化流程中断。文章首先列出了所需的开发环境和工具,然后通过C#代码示例详细展示了如何在Firefox浏览器中设置代理IP、端口、用户名、密码以及UserAgent和Cookies。代码中包含了自动处理代理身份验证弹出窗口的配置,以及如何添加Cookies的方法。最后,文章强调了结合C#和Selenium可以提高网页抓取任务的稳定性和效率。
298 3
解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
|
人工智能 缓存 调度
技术改变AI发展:RDMA能优化吗?GDR性能提升方案(GPU底层技术系列二)
随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。GPUDirect RDMA 是 Kepler 级 GPU 和 CUDA 5.0 中引入的一项技术,可以让使用pcie标准的gpu和第三方设备进行直接的数据交换,而不涉及CPU。
138744 6
|
关系型数据库 PostgreSQL
PostgreSQL 比较运算符
PostgreSQL 比较运算符
2185 0
|
8月前
|
分布式计算 Java 大数据
MapReduce自定义分组比较器(GroupingComparator)
总的来看,自定义的GroupingComparator为用户在MapReduce框架中实现特定的业务需求,提供了极大的便利和灵活性。只需要遵循上述步骤,即可轻松创建并使用自定义分组比较器。
210 22
A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.0 as it may crash. To support
本文讨论了在NumPy 2.0.0版本更新后可能出现的兼容性问题,并提供了通过降级NumPy版本至1.x的解决方法,以支持尚未更新的模块或库。
|
12月前
|
存储 缓存 安全
阿里云服务器通用算力型u1实例怎么样?实例性能与测评结果参考
本文将通过性能评测、适用场景、特点介绍、实测数据分享以及最新活动价格等多个方面,全方位解析这款云服务器实例,以供用户了解和参考。
|
机器学习/深度学习 人工智能 供应链
探索未来技术前沿:人工智能与区块链的融合创新
【10月更文挑战第14天】 探索未来技术前沿:人工智能与区块链的融合创新
|
机器学习/深度学习 资源调度 算法
R语言逻辑回归与分类模型的深度探索与应用
【8月更文挑战第31天】逻辑回归作为一种经典的分类算法,在R语言中通过`glm()`函数可以轻松实现。其简单、高效且易于解释的特点,使得它在处理二分类问题时具有广泛的应用价值。然而,值得注意的是,逻辑回归在处理非线性关系或复杂交互作用时可能表现不佳,此时可能需要考虑其他更复杂的分类模型。
|
存储 Kubernetes 数据安全/隐私保护
k8s学习--Secret详细解释与应用
Secret 支持四种类型: - **Opaque Secrets**:存储任意类型机密数据,需自行加密。 - **Service Account Token Secrets**:自动管理 API 访问令牌。 - **Docker Registry Secrets**:存储 Docker 私有仓库认证信息。 - **TLS Secrets**:存储 TLS 证书和私钥,用于加密通信。
1148 0
|
Cloud Native 测试技术 数据库
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
591 8

热门文章

最新文章