ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python - Logging_1
    카테고리 없음 2019. 10. 25. 13:07
    반응형

    Logging

    - 프로그램의 상태를 외부로 출력하여 개발자가 확인할 수 있다.


    Python에서 logging 모듈은 기본 라이브러리에 포함되어 있다.

     


    Ex)

    import logging

     

    if __name__ == '__main__':

        logging.error("something wrong!!")

     


    로깅 레벨

    - DEBUG

    - INFO

    - WARNING

    - ERROR

    - CRITICAL

     

    Ex)

    logging.info("hello world")

     

    파이썬 로깅 디폴트 설정은 WARNING이다.

    레벨순서: DEBUG<INFO<WARNING<ERROR<CRITICAL

     

    실행결과: 상위레벨인 ERROR는 출력이 되지만, 하위레벨인 INFO, DEBUG는 출력이 되지 않는다.

     

    즉 레벨을 DEBUG, INFO로 설정 한후에 사용하면 된다.

     

    * 중요: print로 모든 로깅을 출력할 경우 실제 프로그램이 배포 될 때, 수많은 정보를 출력하게되어 프로그램 성능에

    부담이 클 수 있다. 또한 출력을 파일로 할 경우 너무 커져 시스템이 멈출 수 있다.

     


    로깅 - 로거 생성

    ----------------------------------------------------

    import logging

     

    if __name__ == '__main__':

       mylogger = logging.getLogger("my")

    -----------------------------------------------------

    -> 'my' 로거를 생성한다.

     


    로깅 - 레벨 설정

    ---------------------------------------------------

    mylogger = logging.getLogger("my")

    mylogger.setLevel(logging.INFO)

    ---------------------------------------------------

    -> setLevel 메소드를 통해서 INFO 레벨 이상을 출력 할 수 있다. 

    레벨순서: DEBUG<INFO<WARNING<ERROR<CRITICAL

     


    로깅 - 핸들러 설정

    ---------------------------------------------------------------

    stream_handler = logging.StreamHandler()

    mylogger.addHandler(stream_handler)

     

    mylogger.info("server start")

    ---------------------------------------------------------------

    결과: "server start"

     

    Handler: 로깅결과를 출력하는 위치를 설정하는 것이다.

    출력방식: File, DB, Socket, Queue

     


    로깅 - 파일 핸들러 설정

    -----------------------------------------------------------------

    file_handler = logging.FileHandler('my.log')

    mylogger.addHandler(file_handler)

     

    mylogger.info("server start")

    -----------------------------------------------------------------

    -> logging.FileHandler 클래스를 통해 file_handler 객체를 생성하여 로거에 추가하였다.

     

    실행결과: 소스 디렉토리에 'my.log'파일이 생성된다.

    중요: 파일은 디폴트인 'a'모드로 열린다. 같은 이름의 파일이 존재할 경우 덧붙여 쓰여진다.

     


    로깅 - 포매팅 설정

    ------------------------------------------------------

    mylogger = logging.getLogger("my")

    mylogger.setLevel(logging.INFO)

     

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

     

    stream_handler = logging.StreamHandler()

    stream_handler.setFormatter(formatter)

    mylogger.addHandler(stream_handler)

     

    file_handler = logging.FileHandler('my.log')

    mylogger.addHandler(file_handler)

     

    mylogger.info("server start")

    -------------------------------------------------------

     

    일반적인 로깅결과에 대해 추가적인 정보를 포매팅할 수 있다.

     

    - asctime: 시간

    - name: 로거이름

    - levelname: 로깅레벨

    - message: 메시지

     

    * 중요: 이외에도 매뉴얼을 참고하여 더 많은 정보를 출력할 수 있다. 

     

    요약정리:

    로거 객체생성 -> 로깅 레벨설정 -> 포매터 객체생성 -> 핸들러 객체생성 ->  실행

    반응형
Designed by Tistory.