로깅 모듈을 통해 일부 로그에 상황 별 정보를 추가하려고합니다. 로그의 각 줄 옆에 projectid를 볼 수 있어야하며 매일 2 만 개가 넘는 프로젝트가 생성되므로이 데이터가 실제로 도움이됩니다. 이를 위해 logging.Filter 모듈의 파생물을 만들었습니다.django의 logging.filters에 동적 요소 추가 1.3
import logging
class MTFilter(logging.Filter):
def __init__(self, projectid=0):
self.projectid = projectid
def filter(self, record):
record.projectid = self.projectid
return True
여기 settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'filters': {
'project': {
'()': 'app.proj.logging.mtfilter.MTFilter',
},
},
'formatters': {
'projectformat': {
'format': '%(asctime)s %(levelname)8s PID[%(projectid)d] %(name)s[%(funcName)s]: %(message)s',
},
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'project-log': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'projectformat',
'filename': os.path.join(SITE_ROOT, '../logs/django.log'),
'filters': ['project'],
'maxBytes': 1024*1024*16, #16Mb
},
},
'loggers': {
'': {
'handlers': ['null'],
'level': 'DEBUG',
'propagate': True,
},
'proj': {
'handlers': ['project-log'],
'level': 'DEBUG',
},
}
}
에서 그리고 내보기에 내 LOGGING 변수의 내가 사용 Logging.filters에 'projectid'에 대한 모든 값을 넣어하지 않음으로써 다음
logger = logging.getLogger('proj')
logger.info('Log Message')
.project 기본 형식 값인 '0'을 얻습니다. 로그 결과는 다음과 같다 : 내가하고 싶은 무엇
2011-07-26 02:41:44,488 INFO PID[0] proj[view]: Log Message
는 예를 들어, 동적으로 어떻게 든 'projectid'값을 잡아이다. 로거 객체를 만들거나 미들웨어를 사용할 때 어떻게해야할지 모릅니다. 누구든지 제안이 있습니까?
입니다. 자체 로깅은 로그에 컨텍스트 정보를 추가하는 여러 가지 방법을 제공합니다, 예를 들어'LoggingAdapter' 또는 로깅 호출에 대한 'extra' 키워드 arg. 그러나 (예 : 타사 라이브러리에서) 소스에 액세스 할 수없는 로깅 호출에 컨텍스트 정보를 추가하려면 제안 된 방법이 있습니다. –