日志
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '[%(asctime)s] %(levelname)s : %(message)s'
},
'verbose': {
'format': '[%(asctime)s] %(levelname)s %(filename)s %(funcName)s[line:%(lineno)d] %(message)s'
},
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
},
},
'filters': {
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': log_file_path,
'maxBytes': 1024 * 1024 * 50,
'backupCount': 5,
'formatter': 'verbose',
},
'performance': {
'class': 'logging.FileHandler',
'formatter': 'simple',
'filename': os.path.join(LOG_PATH, 'recruitment.performance.log'),
},
},
'loggers': {
'default': {
'handlers': ['default'],
'level': 'ERROR',
'propagate': True,
},
"project_utils.performance": {
"handlers": ["console", "performance"],
"level": "INFO",
"propagate": False,
},
}
}
中间键代码
import time
import logging
logger = logging.getLogger(__name__)
def performance_logger_middleware(get_response):
def middleware(request):
start_time = time.time()
response = get_response(request)
duration = time.time() - start_time
response["X-Page-Duration-ms"] = int(duration * 1000) # 返回信息增加一个耗时信息,可以不加
logger.info("%s %s %s", duration, request.path, request.GET.dict())
return response
return middleware
加入到setting里中间键里
因为中间键是按上下顺序执行,又记录的是耗时时间,所以放在最上面
MIDDLEWARE = [
'project_utils.performance.performance_logger_middleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware'
]