欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python使用logging模块实现日志记录实例

程序员文章站 2022-03-27 12:56:58
logging模块简介logging模块是Python的一个标准库模块,开发过程中,可以通过该模块,灵活的完成日志的记录。logging模块提供了两种记录日志的方式:1)使用logging提供的模块级别的函数(logging.basicConfig,logging.debug,logging.info…)2)使用logging模块的组件(loggers,handlers,filters,formatters)Python logging日志级别表 1 Python logging日志级别...

logging模块简介

logging模块是Python的一个标准库模块,开发过程中,可以通过该模块,灵活的完成日志的记录。
logging模块提供了两种记录日志的方式:

1)使用logging提供的模块级别的函数(logging.basicConfig,logging.debug,logging.info…)
2)使用logging模块的组件(loggers,handlers,filters,formatters)

Python logging日志级别

表 1 Python logging日志级别
级别 对应的函数 描述
DEBUG logging.debug() 最低级别,用于小细节,通常只有在诊断问题时,才会关心这些消息。
INFO  logging.info() 用于记录程序中一般事件的信息,或确认一切工作正常。
WARNING  logging.warning() 用于表示可能的问题,它不会阻止程序的工作,但将来可能会。
ERROR  logging.error() 用于记录错误,它导致程序做某事失败。
CRITICAL logging.critical() *别,用于表示致命的错误,它导致或将要导致程序完全停止工作。

实例

import logging
from logging.handlers import TimedRotatingFileHandler

class RecordLogs:
    def __init__(self, log_name, level=20, log_format="%(asctime)s,%(msecs)d %(name)s:%(levelname)s: [%(module)s(%(lineno)d)] %(message)s",
                date_format="%Y-%m-%d %H:%M:%S", console_print=True, log_file=None, when=None):
        self.log_name = log_name
        self.level = level
        self.log_format = log_format
        self.date_format = date_format
        self.console_print = console_print
        self.log_file = log_file
        self.when = when

    def print(self):
        # avoid duplicate printing
        if not self.console_print and not self.log_file:
            print("Error: Save log in file, but input not log file!")
            return
        log_dict = logging.Logger.manager.loggerDict
        print_flag = True if self.log_name not in log_dict else False
        when = None if self.when not in ["S", "M", "H", "D", "midnight"] else self.when
        if not print_flag:
            return
        # create logger
        logger = logging.getLogger(self.log_name)
        logger.setLevel(self.level)
        formatter = logging.Formatter(self.log_format, self.date_format)

        if self.console_print:
            # create handler,output log to console
            log_sh = logging.StreamHandler()
            log_sh.setFormatter(formatter)
            # logger add handler
            logger.addHandler(log_sh)
        if self.log_file:
            if when:
                logHandler = TimedRotatingFileHandler(self.log_file, when=when)
                logHandler.setFormatter(formatter)
                logger.addHandler(logHandler)
            else:
                fh = logging.FileHandler(self.log_file)
                fh.setFormatter(formatter)
                # logger add handler
                logger.addHandler(fh)
        return logger

if __name__ == "__main__":
    import time
    test_log = RecordLogs("log_test", console_print=True, log_file="C:/Users/user/Desktop/test.log", when=None, level=10).print()
    while True:
        test_log.info("info logger")
        test_log.error("error logger")
        test_log.warning("warning logger")
        test_log.debug("debug logger")
        time.sleep(10)
结果:

Python使用logging模块实现日志记录实例

总结:

通过该模块针对程序运行过程中打印的日志,尤其是记录错误的信息,对排错直观重要,不然每次都得手动执行程序再次复现,非常的麻烦!

本文地址:https://blog.csdn.net/Lin_Hv/article/details/107663564