一、创建日志配置类
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
| # encoding=utf-8 import logging import time import os
# 创建存储日志的路径 log_path = os.getcwd() class Log(object): def __init__(self): # 文件的命名 self.logname = os.path.join(log_path, '%s.log' % time.strftime('%Y_%m_%d')) # 创建日志对象 self.logger = logging.getLogger(__name__) self.logger.setLevel(logging.DEBUG) # 日志输出格式 self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
def config(self, level, message): # 创建一个FileHandler,用于写到本地 file_handler = logging.FileHandler(self.logname, 'a', encoding='utf-8') file_handler.setLevel(logging.DEBUG) # 设置等级 file_handler.setFormatter(self.formatter) # 把输出格式加入输出方式 self.logger.addHandler(file_handler) # 把以上设置加入对象
# 创建一个StreamHandler,用于输出到控制台 stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.DEBUG) stream_handler.setFormatter(self.formatter) self.logger.addHandler(stream_handler)
if level == 'info': self.logger.info(message) elif level == 'debug': self.logger.debug(message) elif level == 'warning': self.logger.warning(message) elif level == 'error': self.logger.error(message) # 这两行代码是为了避免日志输出重复问题 self.logger.removeHandler(file_handler) self.logger.removeHandler(stream_handler) # 关闭打开的文件 file_handler.close()
def debug(self, message): self.__console('debug', message)
def info(self, message): self.__console('info', message)
def warning(self, message): self.__console('warning', message)
def error(self, message): self.__console('error', message)
|
日志输出格式参数
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
二、使用日志
1 2
| from log_init import Log log.info(“这是个Info日志")
|