python 中的日志模块

定义一个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()

你可能感兴趣的:(python 中的日志模块)