2017-12-04 3 views
0

모든 함수에 데코레이터를 배치하여 함수에서 발생하는 모든 것을 기록하고 싶습니다. 필자는 래퍼 함수와 데코레이터를 사용하여 데코레이터로 함수를 로깅했다.데코레이터로 파이썬/장고 로깅

def func_detail(func): 
    @wraps(func) 
    def func_wrapper(*args, **kwargs): 
     r = func(*args, **kwargs) 
     logging.getLogger(__name__) 
     logging.basicConfig(filename='test.log', filemode='a', 
          format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s', 
           datefmt='%H:%M:%S', 
           level=logging.DEBUG) 
     return r 
    return func_wrapper 

class UsersViewSet(viewsets.ViewSet): 
    @func_detail 
    def list(self, request): 
     queryset = Mytable.objects.all() 
     if request.GET.get('name'): 
      queryset = queryset.filter(name=request.GET.get('name')) 
     serializer = CheckSerializer(queryset, many=True) 
     logging.info("GET request and returned response") 
     return Response(serializer.data) 

문제

views.py 로그 파일이 코드에서 생성되지이다. 또한 다른 프로젝트에서 생성되었지만 로그 파일 (빈 로그 파일)에 아무 것도 인쇄하지 않았습니다. 로그 파일에 모든 일이 발생하면 메시지를 인쇄하고 싶지만 작동하지 않는 것 같습니다. Plz 도움.

+0

코드를 포맷하고 올바르게 들여 쓰기를 시작하십시오. – Shadow

+0

나는했다. 알려 줘서 고마워. @ 섀도우 –

답변

0

decorator 내부 함수는 args 및 kwargs와 함께 외부 함수를 반환해야하며 장식자 문제가 해결되지만 Django는이 장식 된 뷰 함수의 콘솔 출력을 stdr 할 수 없습니다.

def func_detail(func): 
    @wraps(func) 
    def func_wrapper(*args, **kwargs): 
     logging.getLogger(__name__) 
     ---- 
     return func(*args, **kwargs) 
    return func_wrapper 
+0

고마워요! 나는 또한 무엇이 변경되었는지 모델링 할 때 발생하는 변경 사항이나 수정 사항을 추적해야합니다. audit_log를 사용하고 있지만 실제로 도움이되지 않습니다. –

+0

나는 장고 로거 (Django Logger)를 사용하여 로깅에 대한 모델과 모든 것을 제안합니다 ... –

+0

고마워요, 알게 될거예요! –

관련 문제