python 日志类的编写
对于初学者的小白来说,定位问题并解决是至关重要的,在项目里打印日志能方便快速的定位问题。我带来的是非常简单的日志类定义,网上的日志类虽然很多,但是如何调用有一些缺失。接下来遍上代码边解释
import logging
import os
from datetime import datetime
import concurrent.futures
class Logger:
"""日志类"""
def __init__(self, path, clevel=logging.DEBUG, flevel=logging.DEBUG):
self.logger = logging.getLogger(path)
self.logger.setLevel(logging.DEBUG)
fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
# 设置 CMD 日志
sh = logging.StreamHandler()
sh.setFormatter(fmt)
sh.setLevel(clevel)
# 设置文件日志
fh = logging.FileHandler(path)
fh.setFormatter(fmt)
fh.setLevel(flevel)
self.logger.addHandler(sh)
self.logger.addHandler(fh)
self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=1)
def debug(self, message, *args):
self.executor.submit(self.logger.debug, message, *args)
def info(self, message, *args):
self.executor.submit(self.logger.info, message, *args)
def warning(self, message, *args):
self.executor.submit(self.logger.warn, message, *args)
def error(self, message, *args):
self.executor.submit(self.logger.error, message, *args)
def critical(self, message, *args):
self.executor.submit(self.logger.critical, message, *args)
def loggers(LOG_FILE):
t = datetime.now().strftime("%Y-%m-%d_%H")
LOG_FILE = LOG_FILE+r"\scan-engine@{}.log".format(t)
CMD_LOG_LEVEL = os.environ.get("CMD_LOG_LEVEL", logging.DEBUG)
FILE_LOG_LEVEL = os.environ.get("FILE_LOG_LEVEL", logging.DEBUG)
logger = Logger(LOG_FILE, CMD_LOG_LEVEL, FILE_LOG_LEVEL)
return logger
使用上面的代码单独放在utils/logger.py中,设置好路径,在实际应用项目中引用。
如下:
from utils.logger import loggers
logger = loggers("放置日志的文件夹")
logger.info("要记录的信息")