logging模块简介
logging模块是Python的一个标准库模块,开发过程中,可以通过该模块,灵活的完成日志的记录。
logging模块提供了两种记录日志的方式:
1)使用logging提供的模块级别的函数(logging.basicConfig,logging.debug,logging.info…)
2)使用logging模块的组件(loggers,handlers,filters,formatters)
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)
结果:
总结:
通过该模块针对程序运行过程中打印的日志,尤其是记录错误的信息,对排错至关重要,不然每次都得手动执行程序再次复现,非常的麻烦!