前言
- 在 Python 中,可以直接用自带的 logging 模块来记录日志,但是在使用时我们需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份。个人感觉 logging 用起来其实并不是那么好用,主要是配置较为繁琐,相对于新手来说不太友好,那么接下来废话不多说直接上干货代码。
将logging模块封装
-
首先新建一个
log.py
的文件 -
导入需要用到的Python包
import sys import logging from settings import * from os import makedirs from os.path import dirname, exists
-
创建
Logger
类、init
初始化函数、get_logger
函数
class Logger(object): def __init__(self): pass def get_logger(self,name=None): pass
-
初始化函数添加配置项
# 此处可以新建一个settings.py 来存储这些配置选项 如不想多建其他文件 也可直接在初始化配置 self.loggers = {} self.LOG_ENABLED = LOG_ENABLED # 是否开启日志 self.LOG_TO_CONSOLE = LOG_TO_CONSOLE # 是否输出到控制台 self.LOG_TO_FILE = LOG_TO_FILE # 是否输出到文件 self.LOG_PATH = LOG_PATH # 日志文件路径 self.LOG_LEVEL = LOG_LEVEL # 日志级别 self.LOG_FORMAT = LOG_FORMAT # 每条日志输出格式
-
get_logger
函数 判断是否输出到控制台代码
if self.LOG_ENABLED and self.LOG_TO_CONSOLE: stream_handler = logging.StreamHandler(sys.stdout) stream_handler.setLevel(level=self.LOG_LEVEL) formatter = logging.Formatter(self.LOG_FORMAT) stream_handler.setFormatter(formatter) logger.addHandler(stream_handler)
-
get_logger
函数 判断是否输出到文件代码
if self.LOG_ENABLED and self.LOG_TO_FILE: log_dir = dirname(self.LOG_PATH) if not exists(log_dir): makedirs(log_dir) file_handler = logging.FileHandler(self.LOG_PATH, encoding='utf-8') file_handler.setLevel(level=self.LOG_LEVEL) formatter = logging.Formatter(self.LOG_FORMAT) file_handler.setFormatter(formatter) logger.addHandler(file_handler)
-
至此
log.py
文件就完成了 -
在创建一个
settings.py
来存储log的配置选项(此文件可不创建直接在log.py
的初始化函数中配置) -
settings.py
中配置代码
# 日志配置 # 是否开启log日志 LOG_ENABLED = os.getenv('LOG_ENABLED', 'True').upper() == 'TRUE' # 是否输出到控制台 LOG_TO_CONSOLE = os.getenv('LOG_TO_CONSOLE', 'True').upper() == 'TRUE' # 是否输出到文件 LOG_TO_FILE = os.getenv('LOG_TO_FILE', 'True').upper() == 'TRUE' # 日志等级 LOG_LEVEL = os.getenv('LOG_LEVEL', 'DEBUG') # 每条日志输出格式 log_format = '%(levelname)s - %(asctime)s - process: %(process)d - %(filename)s - %(name)s - %(lineno)d - %(module)s - %(message)s' LOG_FORMAT = os.getenv('LOG_FORMAT', log_format) # 项目绝对路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 日志存放路径 PATH = os.path.join(BASE_DIR, 'logs') isExists = os.path.exists(PATH) # 判断结果 if not isExists: # 如果不存在则创建目录 os.makedirs(PATH) now_date = datetime.datetime.now().strftime("%Y-%m-%d") # 日志文件的绝对路径 LOG_PATH = os.path.join(PATH, f'proxy-log-{now_date}.log') from log import Logger log = Logger().get_logger()
-
首先新建一个
log.py
的文件 -
导入需要用到的Python包
from settings import log log.debug('This is a debug message!') log.error('This is an error message!')
-
打印信息
DEBUG - 2021-11-24 17:37:37,238 - process: 23652 - test.py - log - 10 - test - This is a debug message! ERROR - 2021-11-24 17:37:37,238 - process: 23652 - test.py - log - 12 - test - This is an error message! Process finished with exit code 0
结语
- 以上就是以上就是封装
logging
的全部代码,希望能帮助一些小伙伴。 - 如操作有问题欢迎去我的博客(www.loganjin.cn)留言或者微信公众号(Python技术交流圈)留言交流哦。
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.loganjin.cn/article/python-logging/
许可协议:署名-非商业性使用 4.0 国际许可协议