Django中logging的配置和使用
日志级别
Logger 可以配置 日志级别:
级别 | 描述 |
---|---|
DEBUG | 排查故障时使用的低级别系统信息 |
INFO | 一般的系统信息 |
WARNING | 描述系统发生了一些小问题的信息 |
ERROR | 描述系统发生了大问题的信息 |
CRITICAL | 描述系统发生严重问题的信息 |
formatters相关参数
格式 | 描述 |
---|---|
%(name)s | 记录器 logger 的名字 |
%(levelno)s | 数据形式的日志记录级别 |
%(levelname)s | 文本形式的日志记录级别 |
%(filename)s | 执行日志记录调用的源文件的文件名 |
%(pathname)s | 执行日志记录调用的源文件的 全路径+文件名 |
%(funcName)s | 执行日志记录调用的函数名称 |
%(module)s | 调用的模块名称,django是 app 的名称 |
%(lineno)d | 记录调用的行号 |
%(created)s | 执行日志记录的时间 |
%(asctime)s | 日期时间 |
%(msecs)s | 毫秒部分 |
%(thread)s | 线程ID |
%(threadName)s | 线程名称 |
%(process)d | 进程ID |
%(message)s | 记录的消息,自定义内容 |
setting日志配置
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
"default": {
"format": '%(asctime)s %(name)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s '
'%(levelname)s- %(message)s',
"datefmt": "%Y-%m-%d %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default'
},
'file': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs/debug.log'),
'class': 'logging.handlers.RotatingFileHandler', # 滚动生成日志,切割
'maxBytes': 1024 * 1024 * 10, # 单个日志文件最大为10M
'backupCount': 5, # 日志备份文件最大数量
'formatter': 'simple', # 简单格式
'encoding': 'utf-8', # 放置中文乱码
'formatter': 'default'
},
"request": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/request.log'),
'formatter': 'default'
},
"server": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/server.log'),
'formatter': 'default'
},
"root": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/root.log'),
'formatter': 'default'
},
"db_backends": {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/db_backends.log'),
'formatter': 'default'
},
"autoreload": {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR, 'logs/autoreload.log'),
'formatter': 'default'
}
},
'loggers': {
# 应用中自定义日志记录器
'mylogger': {
'level': 'DEBUG',
'handlers': ['console', 'file'],
'propagate': True, # 向不向更高级别的logger传递
},
"django": {
"level": "DEBUG",
"handlers": ["console", "file"],
'propagate': False,
},
"django.request": {
"level": "DEBUG",
"handlers": ["request"],
'propagate': False,
},
"django.server": {
"level": "DEBUG",
"handlers": ["server"],
'propagate': False,
},
"django.db.backends": {
"level": "DEBUG",
"handlers": ["db_backends"],
'propagate': False,
},
"django.utils.autoreload": {
"level": "INFO",
"handlers": ["autoreload"],
'propagate': False,
}
},
'root': {
"level": "DEBUG",
"handlers": ["root"],
}
}
view中使用
import logging
logger = logging.getLogger('mylogger')
logger.error('test log data!')
将日志设置为每天0点更新
'everyDay': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': '../logs/dataScreenLog.log',
'when': 'midnight',
'interval': 1,
'backupCount': 30,
'formatter': 'default',
'encoding': 'utf-8',
'atTime': datetime.time(0, 0, 0, 0)
}
logging官方文档handlers设置部分:https://docs.python.org/zh-cn/3/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler