2012-11-19 5 views
2

내 tastypie restfull 앱에 대한 액세스 로거를 만드는 데 문제가 있습니다. 서버에 요청에 여러 HTTP 헤더를 기록하고 django 설정 파일에 정의 된 logger/handler에 전달하고 싶습니다. 모든 HTTP 요청을 액세스 로그 파일에 기록하는 것이 아이디어입니다.로깅 Tastypie 요청 (액세스 로그)

여러 개의 로깅 모듈 (응용 프로그램)이 있지만 데이터베이스를 모두 사용하기 때문에 기본 액세스 로그를 좀 더 단순하게 만들고 싶습니다.

답변

3

를 참조하십시오.

또한을 Settings.py Middleware 섹션에 넣었습니다. 미들웨어 구성 요소는 Django Middleware documentation을 볼에 대한

import logging 

logger = logging.getLogger('access') 

class RequestLoggerMiddleware(object): 
    def process_request(self, request): 
     ... logging logic here... 

     logger.info('logging message')) 
     return None 

더 많은 정보를 들면 다음과 같습니다

내 액세스 로깅 미들웨어 클래스의 코드입니다.

-2
import logging 


logger = logging.getLogger('project.app.view') 


def my_view(request): 
    entry = '%s %s for %s' % (request.method, request.get_full_path(), request.META['REMOTE_ADDR']) 
    logger.info(entry) 

내가 응용 프로그램 루트 내부 middleware.py에 내 자신의 미들웨어 클래스를 만들고 결국 https://docs.djangoproject.com/en/1.4/topics/logging/

+0

하지만 난 그냥 Tastypie에서 자원을 사용하고 ... 어떤 의견이 없습니다. 기존 클래스를 유일한 솔루션으로 확장하고 있습니까? – lpandzic

+0

내가해야 할 일은 아무 것도 반환하지 않는 process_request를 사용하여 내 자신의 미들웨어 (https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs)를 구현하는 것입니다. – lpandzic

1

또 다른 가능성은 사용자 정의 ModelResource 객체에서 ModelResource.dispatch() 방법을 무시하는 것입니다

class CustomModelResource(ModelResource): 
    def dispatch(self, request_type, request, **kwargs): 
     """ 
     Override for systematic logging. 
     """ 
     log_user = request.META['USER'] 
     log_request_type = request_type 
     log_resource_name = kwargs['resource_name'] 
     log_api_name = kwargs['api_name'] 
     log_response = {} 

     try: 
      response = super(CustomModelResource, self).dispatch(request_type, request, **kwargs) 
      log_response['response_code'] = response.status_code 
     # Also log what could go wrong 
     except Exception, e: 
      log_response['error_type'] = e.__class__.__name__ 
      log_response['error_message'] = e.message 
      log_response['response_code'] = http.HttpBadRequest.status_code 
      raise 
     finally: 
      # Log all the things 
      logger.debug('%s asked for %s on %s through api %s: \n%s' % (
       log_user, 
       log_request_type, 
       log_resource_name, 
       log_api_name, 
       log_response, 
      )) 

     return response 

class Meta: 
    # Other custom stuff 
+0

프록시 일 수도 있지만,'Request.META [ 'USER']'에서 KeyError를 얻습니다. – mlissner

관련 문제