前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python之logging模块的配置和使用

python之logging模块的配置和使用

作者头像
不止于python
发布2023-09-05 14:23:22
1700
发布2023-09-05 14:23:22
举报
文章被收录于专栏:不止于python不止于python
1 开始吧!

还是不想说太多的话, 这篇主要写一下logging如何使用, 及日志配置文件, 封装日志模块, 多个文件使用日志对象. 关于logging模块的详细参数介绍和使用请看官网

https://docs.python.org/3/library/logging.html?highlight=logging#module-logging

2 简单使用日志模块

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2023-09-03 00:58:01
# @Last Modified by: Mehaei
# @Last Modified time: 2023-09-03 00:58:15
import logging

logging.debug("test debug")
logging.info("test info")
logging.warning("test warning")
logging.error("test error")
logging.critical("test critical")

"""
输出
WARNING:root:test warning
ERROR:root:test error
CRITICAL:root:test critical
[Finished in 0.1s]
"""

debug和info没有输出日志, 是因为日志等级默认为warning, 将日志输出等级改为debug, 随便修改输出日志的格式

修改配置文件代码为

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2023-09-03 00:58:01
# @Last Modified by: Mehaei
# @Last Modified time: 2023-09-03 01:07:55
import logging

FORMAT = "%(asctime)s %(name)s %(filename)s[%(lineno)d] %(funcName)s %(levelname)s %(message)s"
logging.basicConfig(format=FORMAT, level=logging.DEBUG)
logging.debug("test debug")
logging.info("test info")
logging.warning("test warning")
logging.error("test error")
logging.critical("test critical")

"""
输出
2023-09-03 01:07:48,140 root short_use.py[11] <module> DEBUG test debug
2023-09-03 01:07:48,140 root short_use.py[12] <module> INFO test info
2023-09-03 01:07:48,140 root short_use.py[13] <module> WARNING test warning
2023-09-03 01:07:48,140 root short_use.py[14] <module> ERROR test error
2023-09-03 01:07:48,140 root short_use.py[15] <module> CRITICAL test critical
[Finished in 0.1s]
"""

这样就实现了最最基本的自定义配置文件等级和格式

3 更高级的日志模块

配置文件参数及格式可以看官网, 这是我写好的配置文件

支持输出到控制台, 和文件中, 也可以同时输出

下面写一个可以在多个文件中使用的logger对象, 其实就是封装一下

log.conf 配置文件

代码语言:javascript
复制
[loggers]
keys=root,debug,crawler

[handlers]
keys=rotateFileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=rotateFileHandler,consoleHandler

[logger_debug]
level=DEBUG
handlers=consoleHandler
qualname=debug
propagate=0

[logger_crawler]
level=DEBUG
handlers=rotateFileHandler
qualname=crawler
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
args=('%(log_path)s/log', 'a', 1024 * 1024 * 10, 1, 'utf8')
level=DEBUG
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s %(name)s %(filename)s:%(funcName)s:%(lineno)d %(levelname)s %(message)s

logger.py 文件

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2023-09-03 00:31:46
# @Last Modified by: Mehaei
# @Last Modified time: 2023-09-03 09:42:14
import os
import logging
import logging.config


def get_logger(name, plog_conf="log.conf", write_log_path="./log"):
    """
    :param name: logger name
    :param plog_conf: logging config file path
    :param write_log_path: write log file path
    """
    if not os.path.exists(write_log_path):
        os.mkdir(write_log_path)
    logging.config.fileConfig(plog_conf, disable_existing_loggers=False, defaults={"log_path": write_log_path})
    logger = logging.getLogger(name)
    return logger



if __name__ == "__main__":
    # 只输出到控制台
    log = get_logger("debug")
    # # 只输出到文件
    # log = get_logger("crawler")
    # # 同时输出到控制台和文件
    # log = get_logger("root")
    log.debug("test debug")
    log.info("test info")
    log.warning("test warning")
    log.error("test error")
    log.critical("test critical")


"""
输出
2023-09-03 09:44:38,481 debug logger.py:<module>:32 DEBUG test debug
2023-09-03 09:44:38,481 debug logger.py:<module>:33 INFO test info
2023-09-03 09:44:38,481 debug logger.py:<module>:34 WARNING test warning
2023-09-03 09:44:38,481 debug logger.py:<module>:35 ERROR test error
2023-09-03 09:44:38,481 debug logger.py:<module>:36 CRITICAL test critical
[Finished in 0.1s]
"""

4 其它文件导入使用

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2023-09-03 09:42:45
# @Last Modified by: Mehaei
# @Last Modified time: 2023-09-03 09:43:22
from logger import get_logger

log = get_logger("debug")

log.debug("test debug")
log.info("test info")
log.warning("test warning")
log.error("test error")
log.critical("test critical")

"""
输出
2023-09-03 09:43:22,801 debug crawler.py:<module>:10 DEBUG test debug
2023-09-03 09:43:22,801 debug crawler.py:<module>:11 INFO test info
2023-09-03 09:43:22,801 debug crawler.py:<module>:12 WARNING test warning
2023-09-03 09:43:22,801 debug crawler.py:<module>:13 ERROR test error
2023-09-03 09:43:22,801 debug crawler.py:<module>:14 CRITICAL test critical
[Finished in 0.1s]
"""

快乐的时光总是短暂的, 下次见~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不止于python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档