Python日志

一、logging

  1、Django settings.py配置:

LOG_PATH = '/home/work/log/'
# 如果不存在这个logs文件夹,就自动创建一个
if not os.path.exists(LOG_PATH):
    os.makedirs(LOG_PATH)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        # 日志格式
        'standard': {
            'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'},
        'simplify': {
            'format': '[%(asctime)s] [%(module)s:%(lineno)d] [%(levelname)s]- %(message)s'}
    },
    # 过滤
    'filters': {
    },
    'handlers': {
        # 控制台输出
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        # 默认记录所有日志
        'default': {
            'level': 'INFO',
            # 'class': 'logging.handlers.RotatingFileHandler',
            # 'filename': os.path.join(LOG_PATH, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),  # 日志输出文件
            # 'maxBytes': 1024 * 1024 * 500,  # 文件大小
            # 日志文件按日期翻转输出,每天一个文件,具体:https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
            'class': 'logging.handlers.TimedRotatingFileHandler',
            # 凌晨翻转
            'when': 'midnight',
            'filename': os.path.join(LOG_PATH, 'all.log'),
            'backupCount': 15,  # 备份份数,保留15天的日志
            'formatter': 'standard',  # 使用哪种formatters日志格式
            'encoding': 'utf-8',  # 设置默认编码,否则打印出来汉字乱码
        },
        # 输出info日志
        'info': {
            'level': 'INFO',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when': 'midnight',
            'filename': os.path.join(LOG_PATH, 'info.log'),
            'backupCount': 15,
            'formatter': 'standard',
            'encoding': 'utf-8',  # 设置默认编码
        },
        # 错误日志输出
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when': 'midnight',
            'filename': os.path.join(LOG_PATH, 'error.log'),
            'backupCount': 15,  # 备份数
            'formatter': 'standard',  # 输出格式
            'encoding': 'utf-8',  # 设置默认编码
        },
    },
    # 配置使用哪几种handlers来处理日志
    'loggers': {
        'django': {
            'handlers': ['info', 'error'],
            'level': 'INFO',
            'propagate': True
        },
        'django.request': {
            'handlers': ['info', 'error'],
            'level': 'INFO',
            'propagate': True,
        },
        # log 调用时需要当作参数传入,如:logging.getLogger("log")
        'log': {
            'handlers': ['info', 'error'],
            'level': 'INFO',
            'propagate': True
        },
    }
}

 

   2、使用

logger = logging.getLogger(__name__)

logger.info("time: %s, hunan channels and programs sync start", datetime.datetime.now())

   或者:

    ①:定义一个日志处理方法

# 日志
def logger():
    def wrapper(cls):
        logger = logging.getLogger(cls.__name__)
        cls.logger = logger
        return cls

    return wrapper

    ②:使用@logger()注解

@logger()
class CableChannelPublisher(QueryMixin, CableCachePublisher):
    def run(self, **opt):
        self.logger.info("CableChannelPublisher! opt:%s", opt)

 

   

 

 

 

 

 

附录:

  loggging官方文档:

    https://docs.python.org/zh-cn/3/howto/logging.html

    https://docs.python.org/zh-cn/3/library/logging.html

 

END.

posted @ 2022-02-09 11:11  杨岂  阅读(324)  评论(0编辑  收藏  举报