转载请注明出处❤️
作者:测试蔡坨坨
原文链接:caituotuo.top/11abedfb.html
大家好,我是测试蔡坨坨。
今天,我们来说说Python日志模块封装。
一、封装好的类(直接copy即用)
对Python logging
模块进行二次封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
import os import time import logging from logging import handlers
from utils.get_path_info import GetPathInfo
class GetLogger(object): """ 日志封装类 """
@classmethod def get_logger(cls): log = logging.getLogger() level_relations = { 'NOTSET': logging.NOTSET, 'DEBUG': logging.DEBUG, 'INFO': logging.INFO, 'WARNING': logging.WARNING, 'ERROR': logging.ERROR, 'CRITICAL': logging.CRITICAL }
project_path = GetPathInfo().get_project_path() logs_dir = project_path + "logs" if os.path.exists(logs_dir) and os.path.isdir(logs_dir): pass else: os.mkdir(logs_dir) log_file_name = '%s.log' % time.strftime("%Y-%m-%d", time.localtime()) log_file_path = os.path.join(logs_dir, log_file_name)
rotating_file_handler = handlers.TimedRotatingFileHandler(filename=log_file_path, when='D', interval=30, encoding='utf-8')
fmt = "%(asctime)s %(levelname)s %(pathname)s %(lineno)d %(message)s" formatter = logging.Formatter(fmt) rotating_file_handler.setFormatter(formatter)
if not log.handlers: console = logging.StreamHandler() console.setLevel(level_relations["NOTSET"]) console.setFormatter(formatter) log.addHandler(rotating_file_handler) log.addHandler(console) log.setLevel(level_relations['DEBUG']) return log
if __name__ == '__main__': logger = GetLogger().get_logger() logger.debug('调试') logger.info('信息') logger.warning('警告') logger.error('报错') logger.critical('严重')
|
1. For example
1 2 3 4 5
| fmt = "%(name)s %(asctime)s %(created)f %(relativeCreated)d %(msecs)d %(levelname)s %(levelno)s %(pathname)s %(filename)s %(module)s %(funcName)s %(lineno)d %(process)d %(thread)d %(threadName)s %(message)s" formatter = logging.Formatter(fmt)
结果: root 2022-03-20 03:00:05,449 1647716405.449377 28 449 DEBUG 10 F:/Desktop/qys_priv_open/utils/get_logger.py get_logger.py get_logger <module> 68 7420 3244 MainThread 调试
|
2. 常用的格式字符串
格式字符串 |
作用 |
例如 |
%(name)s |
Logger的名称 |
root |
%(asctime)s |
打印日志的时间,字符串形式(datetime.datetime.now()的返回值) |
2022-03-20 02:30:12,776 (逗号后面是毫秒) |
%(created)f |
日志打印的时间,用Unix标准地表示时间的浮点数(time.time()的返回值) |
1647715277.792532 |
%(relativeCreated)d |
输出日志信息的耗时,从Looger创建开始计时,以毫秒为单位 |
35 |
%(msecs)d |
打印日志的时间的毫秒部分 |
449 |
%(levelname)s |
日志级别,文本形式 |
“DEBUG”、“INFO”、“WARNING”、“ERROR”、“CRITICAL” |
%(levelno)s |
日志级别,数字形式 |
DEBUG=10、INFO=20、WARNING=30、ERROR=40、CRITICAL=50 |
%(pathname)s |
调用日志输出函数的模块的完整路径名 |
F:/Desktop/qys_priv_open/utils/get_logger.py |
%(filename)s |
调用日志输入函数的模块的文件名 |
get_logger.py |
%(module)s |
调用日志输出函数的模块名 |
get_logger |
%(funcName)s |
调用日志输出函数的函数名 |
<module> |
%(lineno)d |
调用日志输出函数的语句所在的代码行 |
69 |
%(process)d |
进程ID |
7840 |
%(thread)d |
线程ID |
6004 |
%(threadName)s |
线程名 |
MainThread |
%(message)s |
输出的日志信息 |
这是一条测试日志 |
最后,可以关注公众号 测试蔡坨坨,和坨坨一起学习软件测试,升职加薪 ~
关于软件测试相关问题,都可以添加我微信私信交流:caituotuo666
需要学习资料也可以私信!!!免费获取简历、面试题、自动化测试、测试开发、性能等30种学习资源……