Python日志模块封装
一、先上结论
对
Python logging
模块进行二次封装
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 博客:caituotuo.top
# 时间:2022/3/16 20:10
# 功能:日志模块封装
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):
# logger = logging.getLogger(__name__) # 不会打印 HTTP General 信息
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() # 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('严重')
二、logging.Formatter自定义日志格式
1. For example
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 |
输出的日志信息 | 这是一条测试日志 |
原文链接:https://caituotuo.top/11abedfb.html
微信公众号:IT小学生蔡坨坨
本文作者:测试蔡坨坨
本文链接:https://www.cnblogs.com/caituotuo/p/16015512.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步