python에서 제공하는 logging
로그의 각 레벨과 설명을 간략하게 정리해보자면
이다.
WARNING
으로 설정되어 있다. 특별한 설정을 하지 않을 경우 WARNING
레벨과 이보다 더 심각한 레벨의 로그만 처리된다. 위에 링크된 LOGGING 관련 doc에서의 가장 적합한 로깅 방법은 아래와 같다.
import logging
logging.warning('Warning message')
logging.info('Info message')
# output
#WARNING:root:warning messages
위의 코드를 보면, warning
로그는 출력이 되지만 info
로그는 출력이 되지 않는데, root logger의 기본 level이 warning
수준이어, 해당 수준 이상의 로그만 처리되기 때문이다.
이러한 logger가 처리하는 로그의 레벨을 조정하는 방법은 아래와 같다.
basicConfig
의 level 인자를 조절한다. import logging
logging.basicConfig(level=logging.INFO)
logging.warning("warning messages")
logging.info("info message")
#output
#WARNING:root:warning messages
#INFO:root:info message
출력되는 로그의 포맷팅은 아래와 같은 방법을 이용한다.
import logging
logging.basicConfig(
format="%(asctime)s/%(levelname)s/%(message)s",
datefmt="%m/%d/%Y %I:%M:%S %p",
level=logging.DEBUG,
)
logging.debug("Formatting debug message")
# output
# 04/12/2024 03:04:19 PM/DEBUG/Formatting debug message
콘솔로 출력하는 것 외에도 파일로 저장할 수 있는데,
baseConfig
의 filename
인자를 넣어준다.
이때 level
인자 또한 지정해주면, 해당 인자 수준의 이상의 로그가 파일로 저장된다.
import logging
logging.basicConfig(filename="logging_test.log", level=logging.INFO)
logging.debug("debug message")
logging.warning("warning messages")
logging.info("info message")
위의 logging_test.log 파일은
WARNING:root:warning messages
INFO:root:info message
위와 같이 저장되어 있다.
이렇게 설정을 할 경우에는 콘솔에 로그 메시지가 출력되지 않는다.
basicConfig를 여러번 실행해도 가장 처음 호출된 설정만 유효하고, 나머지 설정이 적용되지 않는다.
-> Root logger에 이미 handler 가 설정되어 있다면, basicConfig
는 아무런 처리도 하지 않는다.
여러 개의 handler를 등록하고 싶은 경우 handlers
인자로 전달하는 방법이 있지만 가장 처음의 설정만 유효하다는 점은 변함이 없기 때문에 하나의 logger에서 발생한 로그를 여러 handler가 처리하도록 설정하는 방법은 따로 있다.
이를 언급하기 전에 다음 장에서 로깅 시스템의 구성 요소들을 훑고가자.