ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🤖 Django - Logging
    프로그래밍/Django & Flask 2020. 10. 24. 21:24
    반응형

    장고의 로깅


     

    Logging 주요 컴포넌트 관계

    1) 로거

    로거는 로깅 시스템의 시작점으로, 로그 메세지를 처리하기 위해 메시지를 담아두는 저장소다. 

    로거는 로그 레벨을 갖게 되는데, 이는 로그 메시지의 중요도에 따라 자신이 어느 레벨 이상의 메시지를 처리할지에 대한 기준이 된다.

     

    * 파이썬 로그 레벨

    DEBUG 디버그 용도로 사용되는 정보로, 로그 레벨의 최하위 수준
    INFO 일반적이고 보편적인 정보
    WARNING 문제점 중에서 덜 중요한 문제점이 발생 시 이에 대한 정보
    ERROR 문제점 중에서 주요 문제점이 발생 시 이에 대한 정보
    CRITICAL 치명적인 문제점이 발생 시 이에 대한 정보로, 로그 레벨의 최상위 수준

     

    로거에 저장되는 메시지를 로그 레코드라고 하며, 로그 레코드 여시 로그 레벨을 가진다.

    로그 레코드는 스택 트레이스 정보나 에러 코드 등의 로그 이벤트에 대한 유용한 메타 정보도 가지고 있다.

     

    메세지가 로거에 도착하면 로그 레코드의 로그 레벨과 로거의 로그 레벨을 비교한다. 로그 레코드의 로그 레벨이 로거 자체의 로그 레벨과 같거나 그보다 높으면 메시지 처리를 계속 진행하고, 더 낮으면 그 메시지는 무시된다. 이렇게 로그 레코드와 로거의 로그 레벨을 비교하여 메시지 처리를 진행하는 것으로 결정되면 로거는 메시지를 핸들러에게 넘겨준다. 

     

    2) 핸들러

    핸들러는 로거에 있는 메시지에 무슨 작업을 할지 결정하는 엔진이다. 메시지를 화면이나 파일 또는 네트워크 소켓 등 어디에 기록할 것인지와 같은 로그 동작을 정의한다. 핸들러도 로그 레벨을 가지고 있다. 로드 레코드의 로그 레벨이 핸들러의 로그 레벨보다 더 낮으면 핸들러는 메시지를 무시한다.

     

    로거는 핸들러를 여러 개 가질 수 있고, 각 핸들러는 서로 다른 로그 레벨을 가질 수 있다. 이렇게 해서 메시지의 중요도에 따라 다른 방식의 로그 처리가 가능하다. 

     

    3) 필터

    로그 레코드가 로거에서 핸들러로 넘겨질 때, 필터를 사용해서 로그 레코드에 추가적인 제어를 할 수 있다. 

    기본 처리 방식은 로그 레벨을 지정하여 그 로그 레벨에 해당되면 관련 로그 메시지를 처리하는 것이다. 그러나 필터를 적용하면 로그 처리 기준을 추가 할 수 있다. (특정 소스로부터 오는 메시지만 핸들러로 넘기기 등) 필터를 사용하면 로그 레코드를 보내기 전에 수정하는 것도 가능하다. (error 로그 레코드를 warning으로 낮추기)

     

    4) 포맷터

    로그 레코드는 최종적으로 텍스트로 표현되는데, 포맷터는 텍스트로 표현 시 정확한 포맷을 지정해준다. 

     

    5) 로거 사용 및 로거 이름 계층화

    import logging
    
    logger = logging.getLogger(_name_) #로거 객체 획득 
    
    def my_view(request, arg1, argN):
    	if bad_mojo:
        	logger.error('Something went wrong!')

     

    6) 로깅 설정

    장고는 사전형 설정 방식을 디폴트로 설정한다. (setting.py에서 설정) 

    이러한 설정에서는 로거, 핸들러, 필터, 포맷터에 대한 정의 뿐만 아니라, 각 컴포넌트의 로그 레벨과 같은 속성들도 정의한다. Logging 항목을 지정하지 않으면 디폴트 로그 설정을 사용한다. 

     

    출처: 김석훈, Django로 배우는 쉽고 빠른 웹개발, 한빛미디어(2015)
    반응형

    댓글

Designed by Tistory.