一、创建日志配置类

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日志")