定义一个log.py文件添加如下代码:
import os
import logging
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DEBUG = True # 标记是在开发环境中使用
# 给过滤器使用的判断
class RequireDebugTrue(logging.Filter):
# 实现filter方法
def filter(self, record):
return DEBUG
LOGGING = {
# 基本设置
'version': 1, # 日志优先级别
'disable_existing_loggers': False,
# 日志格式集合
'formatters': {
# 标准输出格式
'standard': {
# [具体时间] [线程名: 线程ID][日志名字: 日志优先级别(日志级别ID)][输出的模块: 输出的函数]: 日志内容 }
'format': '[%(asctime)s][%(threadName)s:%(thread)d][%(name)s:%(levelname)s(%(lineno)d)]\
[%(module)s:%(funcName)s]:%(message)s'
}
},
# 过滤器
'filters': {
'require_debug_true': {
'()': RequireDebugTrue,
}
},
# 处理集合器
'handlers': {
# 输出到控制台
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard',
'filters': ['require_debug_true',],
},
# 输出到文件
'log': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'standard',
'filename': os.path.join(BASE_DIR, 'debug.log'), # 输出位置
'maxBytes': 1024*1024*5, # 文件大小 5M
'backupCount': 5, # 备份份数,
'encoding': 'utf-8', # 文件编码
},
},
# 日志管理器集合
'loggers': {
# 管理器
'default': {
'handlers': ['console', 'log'],
'level': 'DEBUG',
'propagate': True, # 是否传递给父记录器
},
}
}
在需要记录日子的地方写入如下代码 如:
import logging
import logging.config
import log
logging.config.dictConfig(log.LOGGING)
# #尝试写入不同消息级别的日志信息
# logger.debug("debug message")
# logger.info("info message")
# logger.warn("warn message")
# logger.error("error message")
# logger.critical("critical message")
#
#
# def test(a):
# if a > 1:
# logger.info('正确')
# else:
# logger.error('输入错误')
# 日志记录装饰器
def recode_log(func):
# 获取loggers其中的一个日志管理器
logger = logging.getLogger('default')
def warpper(*args, **kwargs):
# 记录日志开始时间
logger.debug('start {} file'.format(func.__name__))
# 运行方法
func()
# 记录结束运行时间
logger.debug('end {} file'.format(func.__name__))
return warpper
@recode_log
def test():
print('run test')
if __name__ == '__main__':
test()