<返回更多

Python logging模块怎么使用,你会了吗?

2023-08-03    ceshiren
加入收藏

Python/ target=_blank class=infotextkey>Python logging模块使用

在开发和维护Python应用程序时,日志记录是一项非常重要的任务。Python提供了内置的logging模块,它可以帮助我们方便地记录应用程序的运行时信息、错误和调试信息。本文将介绍如何使用Python logging模块进行日志记录。

获取更多技术资料,请点击!

logging模块

logging是Python自带的用于记录程序运行日志的模块,它将日志分为5个等级,分别是:

同时也可以将日志输出到控制台或者写入到日志文件中。

logging中的常用对象

三者关系为,一个 Logger 使用一个 Handler,一个 Handler 使用一个 Formatter。

日志输出到控制台

import logging

# 创建logger实例

logger = logging.getLogger('example')

# 设置日志级别

logger.setLevel(logging.DEBUG)

# 创建控制台处理器,将日志输出到控制台

console_handler = logging.StreamHandler()

console_handler.setLevel(logging.DEBUG)

# 创建日志格式

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 将日志格式应用到处理器

console_handler.setFormatter(formatter)

# 将处理器添加到logger实例中

logger.addHandler(console_handler)

# 记录日志信息

logger.debug('debug')

logger.info('info')

logger.warning('warning')

logger.error('error')

logger.critical('critical')

运行代码,控制台输出如下:

2023-06-29 11:04:29,242 - example - DEBUG - debug

2023-06-29 11:04:29,242 - example - INFO - info

2023-06-29 11:04:29,242 - example - WARNING - warning

2023-06-29 11:04:29,242 - example - ERROR - error

2023-06-29 11:04:29,242 - example - CRITICAL - 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")

日志文件内容如下图:

同时输出到文件和控制台

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")

logging.conf配置文件

我们可以通过logging.conf来配置日志的输出,logging.conf名称是固定的。

[loggers]

keys = root

[handlers]

keys = logfile

[formatters]

keys = generic

[logger_root]

handlers = logfile

[handler_logfile]

class = handlers.TimedRotatingFileHandler

args = ('demo.log', 'midnight', 1, 10)

level = DEBUG

formatter = generic

[formatter_generic]

format = %(asctime)s %(levelname)-3.5s [%(name)s:%(lineno)s] %(message)s

import logging.config

logging.config.fileConfig('logging.conf')

logging.debug('debug message')

logging.info("info message")

logging.warning('warning message')

logging.error("error message")

logging.critical('critical message')

运行结果如下:

循环覆盖式日志处理

随着程序逐渐运行,日志规模会越来越大,我们就需要删除掉之前的日志,也可以设置单个日志的大小,当日志大小达到限定值时,会自动开始写入新的日志文件。

import logging

from logging.handlers import RotatingFileHandler

logger = logging.getLogger("root")

# 设置logger等级

logger.setLevel(logging.DEBUG)

# 设置日志格式

formatter = logging.Formatter(

fmt='%(asctime)s - %(pathname)s - %(name)s - %(levelname)s: - %(message)s',

datefmt='%Y-%m-%d %H:%M:%S')

# 设置日志回滚 # 单个日志文件最大为1k,

# 最多保存4份日志文件(除了当前写入的文件外)

# 日志文件编码格式为utf-8

handler = RotatingFileHandler("logging.log", maxBytes=1024 * 1, backupCount=4, encoding='utf-8')

handler.setFormatter(formatter)

# 给logger添加handler

logger.addHandler(handler)

# 测试主模块

for i in range(100):

logger.debug("测试日志mAIn %d", i)

总结

通过使用Python的logging模块,我们可以方便地进行日志记录并获得应用程序的运行时信息。我们可以设置不同的日志级别,根据需要记录调试信息、警告、错误等。此外,我们还可以将日志记录到文件中,以供后续查看和分析。

使用logging模块进行日志记录可以帮助我们更好地理解应用程序的运行状况,并帮助我们快速定位和解决问题。建议在开发和维护Python应用程序时,充分利用logging模块进行日志记录。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>