logging

作者: manbug | 来源:发表于2018-05-11 16:40 被阅读0次

python的日志相关操作,本文讲述配合django框架使用

这里就不废话了,直接上代码,看名字基本就理解了

1. 配置

  1. filters
'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
  1. formatters
'formatters': {
        'console': {
            # '()': 'djangocolors_formatter.DjangoColorsFormatter',
            'format': '[%(levelname)s] %(asctime)s::%(module)s - %(process)d %(thread)d %(message)s',
        },
        'file': {
            'format': '[%(asctime)s] %(levelname)s::(P:%(process)d T:%(thread)d)::%(module)s - %(message)s',
        },
        'django.server': {
            '()': 'django.utils.log.ServerFormatter',
            'format': '[%(server_time)s] %(message)s',
        }
    },
  1. handlers
'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'console',
            # 'use_colors': True,
        },
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
        },
        'debug': {
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filters': ['require_debug_false'],
            'formatter': 'file',
            'level': 'DEBUG',
            'when': 'midnight',
            'filename': LOGS_DIR + 'debug.log',
            'interval': 1,
            'backupCount': 0,
            'encoding': 'utf-8',
            'delay': False,
            'utc': False,
        },
        'daily': {
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'filters': ['require_debug_false'] if not DEBUG else ['require_debug_true'],
            'formatter': 'file',
            'level': 'INFO',
            'filename': LOGS_DIR + 'daily.log',
            'when': 'midnight',  # 重建时间单位:S-second, M-minute, H-hour, D-day, W-weekday(0:Monday), midnight
            'interval': 1,  # 经过interval个when, logger自动重建
            'backupCount': 0,  # 保留日志文件个数,0表示不会自动删掉日志
            'encoding': 'utf-8',
            'delay': False,
            'utc': False,
        },
    },
  1. loggers
'loggers': {
        'common': {
            'handlers': ['console', 'debug'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'daily': {
            'handlers': ['daily'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django': {
            'handlers': ['console', 'debug'],
            'level': 'DEBUG',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        }
    }

tips:

  • handlers中filter不能同时指定require_debug_true, require_debug_false。
  • 其中handlers中可以指定日志的存储/展现类型:TimedRotatingFileHandler是比较常用的文件存储类型,可以把日志按天/时/分...区分,还有一些备份等设置,上述代码里已注释
  • logging的其中一个重要功能是在debug=False的情况下仍会记录系统的出错信息,如上述的loggers中的django

2. 调用

logger = logging.getLogger("daily")

3. 实际使用

当然,读写文件毕竟在高并发的情景下可能会影响速度,所以笔者只是针对debug用了logging,其余的日常操作日志选择了rabbitmq来传递记录,关于rabbitmq的使用可见RabbitMQ入门

相关文章

网友评论

      本文标题:logging

      本文链接:https://www.haomeiwen.com/subject/rnccrftx.html