Python에서 setLevel()을 사용하여 로깅 수준 설정

Namita Chaudhary 2023년6월21일
  1. Python에서 프로그램에 로그인하는 기능
  2. Python의 로그 메시지 수준
  3. Python 로깅 모듈에서 setLevel() 함수를 사용하여 로깅 수준 설정
  4. Python의 로깅 핸들러
  5. 결론
Python에서 setLevel()을 사용하여 로깅 수준 설정

로깅은 모든 프로그래머의 삶에서 매우 효율적인 도구입니다. 프로그램의 흐름을 더 잘 이해할 수 있을 뿐만 아니라 프로그램 실행 중에 발생할 수 있는 오류의 가능성도 있습니다.

Python은 로깅을 쉽게 하기 위해 표준 라이브러리의 일부로 별도의 logging 모듈을 제공합니다. 이 기사에서는 setLevel 로깅과 Python에서 작동하는 방식에 대해 설명합니다.

Python에서 프로그램에 로그인하는 기능

로깅은 소프트웨어가 실행될 때 프로그램의 흐름을 추적하는 프로세스입니다. 그러나 프로그램에 로그인을 구현하지 않으면 프로그램이 충돌할 때마다 발생한 문제의 원인을 찾기가 어렵습니다.

프로그램에 로깅을 구현하면 문제의 원인을 쉽게 찾고 즉시 해결할 수 있습니다. 소프트웨어를 디버깅하고 개발하는 동안 매우 유용합니다.

때때로 사람들은 print 문을 사용하여 소프트웨어의 문제를 찾습니다. 인쇄는 간단한 스크립트의 문제를 해결할 수 있지만 더 크고 복잡한 소프트웨어에는 좋은 옵션이 아닙니다.

Python은 프로그램의 어느 부분이 실행 중이고 어떤 문제가 발생했는지에 대한 상태 메시지를 출력 스트림이나 파일에 기록하는 표준 라이브러리에서 logging이라는 내장 모듈을 제공합니다.

Python의 로그 메시지 수준

Python의 logging 모듈에는 중요도에 따라 다른 상태/로그 메시지 수준이 있습니다. 따라서 로그 메시지의 수준은 해당 로그 메시지가 얼마나 중요한지 알려줍니다.

로그 메시지의 다른 수준은 DEBUG, INFO, WARNING, ERRORCRITICAL이며 CRITICAL이 가장 중요합니다.

로그 수준 설명
DEBUG 소프트웨어에서 디버깅 목적으로 사용됩니다. 일반적으로 문제가 발생하면 자세한 정보를 제공합니다.
INFO 프로그램에서 모든 것이 제대로 작동하는지 확인합니다.
WARNING 미래에 어떤 문제가 발생할 수 있으며 미래의 문제를 피하기 위해 해결해야 함을 알리는 데 사용됩니다.
ERROR 심각한 문제로 인해 소프트웨어가 특정 기능을 수행할 수 없음을 나타내는 데 사용됩니다.
CRITICAL 이 수준은 소프트웨어 중단을 초래하는 심각한 문제를 나타냅니다.

이러한 모든 수준은 오류가 발생할 때 적절한 메시지가 적절한 시간에 표시될 수 있도록 처리기 또는 로거에 대해 설정됩니다. 로깅 수준은 중요도에 따라 위에 설명되어 있습니다. 첫 번째가 가장 덜 중요하고 마지막(CRITICAL 수준)이 가장 중요합니다.

Python 로깅 모듈에서 setLevel() 함수를 사용하여 로깅 수준 설정

setLevel(level) 기능은 로거의 임계값을 지정된 수준으로 설정하는 데 사용됩니다. 지정된 수준보다 덜 심각한 로깅 메시지는 무시되는 반면 심각도가 더 높은 메시지는 로거를 서비스하는 해당 핸들러에서 내보냅니다.

Python 로그인에는 유효 수준의 개념이 있습니다. 처음에 로거가 생성되면 NOTSET 수준으로 설정됩니다.

그러나 이 NOTSET은 유효 수준이 아닙니다. 유효 레벨은 setLevel(level)의 도움으로 명시적으로 설정된 레벨입니다.

로거가 생성될 때 수준이 명시적으로 설정되지 않은 경우 상위 로거의 수준을 검사하여 setLevel(level)을 사용하여 명시적으로 설정한 로거의 유효 수준을 가져옵니다. 상위 로거도 유효 수준으로 설정되지 않은 경우 상위 로거를 확인합니다.

이 프로세스는 NOTSET 이외의 레벨이 발견되거나 루트에 도달할 때까지 계속됩니다. 루트 로거는 WARNING의 기본 수준으로 설정됩니다. 따라서 이러한 경우 루트의 기본 수준이 유효 수준으로 간주됩니다.

이제 몇 가지 코드 예제를 사용하여 setLevel(level)의 사용법을 살펴보겠습니다.

import logging

logging.debug("Debug message")
logging.info("Info message")
logging.warning("Warning message")
logging.error("Error message")
logging.critical("Critical message")

출력:

WARNING:root:Warning message
ERROR:root:Error message
CRITICAL:root:Critical message

위의 출력에서 볼 수 있듯이 루트 로거의 기본 수준인 WARNING이 다른 로거나 그 부모가 지정되지 않았기 때문에 유효 수준으로 간주되었기 때문에 WARNING, ERRORCRITICAL 메시지만 인쇄됩니다. 따라서 경고 수준 이후의 모든 메시지가 인쇄되고 덜 중요한 메시지는 무시됩니다.

로거가 유효 수준을 상위 수준으로 간주하는 예를 살펴보겠습니다.

import logging

parent_logger = logging.getLogger("parent")
parent_logger.setLevel(4)

child_logger = logging.getLogger("parent.child")

print(parent_logger.getEffectiveLevel())
print(child_logger.getEffectiveLevel())

출력:

4
4

보시다시피 child_logger는 유효 수준으로 설정되지 않았으므로 parent_logger 수준이 유효 수준으로 사용됩니다.

Python의 로깅 핸들러

Python의 핸들러는 핸들러의 지정된 대상에 적절한 로그 메시지를 기록하는 객체입니다. 이러한 핸들러는 로거처럼 작동합니다. 로거에 설정된 핸들러가 없으면 해당 조상에서 핸들러를 검색합니다.

이제 로깅에서 핸들러의 사용법을 살펴보겠습니다.

import logging

logger = logging.getLogger("example")
logger.setLevel(logging.INFO)

fileHandler = logging.FileHandler("p1.log")
fileHandler.setLevel(logging.INFO)

chl = logging.StreamHandler()
chl.setLevel(logging.INFO)

logger.addHandler(fileHandler)
logger.addHandler(chl)

logger.info("Information")

출력:

Information

위의 코드에서 fileHandlerchl이라는 두 개의 핸들러를 만들었습니다. fileHandler는 레코드를 p1.log 파일로 보내고 chl 핸들러는 레코드를 스트림으로 보냅니다.

그러나 스트림이 지정되지 않은 경우 sys.stderr가 사용됩니다. 결국 핸들러는 addHandler를 사용하여 로거에 추가됩니다.

이제 레벨을 두 번 설정한 이유가 궁금하실 것입니다. 하나는 로거용이고 다른 하나는 핸들러용입니다. 처리기에서 setLevel()을 제거하면 메시지의 모든 수준 필터링이 로거에 남게 됩니다.

그러나 핸들러와 로거에 대한 수준을 설정하면 다른 시나리오가 있습니다. 로거는 레벨에 따라 메시지를 필터링하는 첫 번째입니다. 따라서 로거를 WARNING, INFO 또는 더 높은 수준으로 설정하고 핸들러를 DEBUG로 설정하면 처음에 로거가 무시하므로 DEBUG 로그 메시지를 수신하지 않습니다.

마찬가지로 로거를 DEBUG로 설정하고 핸들러를 INFO와 같은 더 높은 수준으로 설정하면 처리기가 거부하므로 DEBUG 메시지도 수신하지 않습니다. 핸들러는 로거가 승인하더라도 이를 거부합니다(INFO > DEBUG 이후).

따라서 소프트웨어의 적절한 작동을 보장하기 위해 로거 및 핸들러의 수준을 설정하는 동안 충분히 주의해야 합니다.

결론

이 기사에서는 setLevel() 로깅과 Python에서 작동하는 방식에 대해 논의했습니다.

로깅은 프로그램의 흐름을 기록하고 오류 가능성을 찾아 소프트웨어 또는 프로그램의 코드를 관리하는 매우 효율적인 도구입니다. Python 로그인의 경우 중요도에 따라 다양한 로그 메시지에 대해 서로 다른 수준을 설정합니다.

이 모든 레벨은 setLevel을 사용하여 설정되며 이 문서에서 자세히 설명했습니다.

관련 문장 - Python Logging