python的日志相关操作,本文讲述配合django框架使用
这里就不废话了,直接上代码,看名字基本就理解了
1. 配置
- filters
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
- 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',
}
},
- 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,
},
},
- 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入门