배경
새 프로젝트에 로깅 함수를 추가하고 직접 작성해보고 싶었는데, 우연히 Google을 통해 Python에 매우 강력한 내장 로그 모듈인 로깅이 있다는 것을 알게 되었습니다. 약간의 조사 끝에 내 메모 중 일부가 여기에 있습니다.
로그를 사용하는 이유
프로그램의 실행 상태를 항상 파악하고, 프로그램 예외를 빠르게 포착하며, 프로그램 오류를 신속하게 발견하려는 목적을 달성하기 위해 프로그램의 일부 실행 정보를 추적합니다
로깅 모듈 소개
Python 2.3부터 Python의 표준 라이브러리에는 로깅 모듈이 추가되었습니다. 로깅 모듈은 애플리케이션 실행을 위한 표준 정보 출력 인터페이스를 제공합니다. 일반적인 로깅 메커니즘 구현은 간단히 작성하는 것입니다. 로그 파일을 작성하는 방법은 일반적인 로깅 방법이며, 로깅 모듈은 더 많은 것을 제공합니다. 이는 TCP 및 UDP 소켓, 이메일 서버, Unix syslog 등 모든 파일과 유사한 개체에 출력 정보를 출력할 수 있습니다.
로깅 모듈 소개:
import logging #import logging module #使用logging模块: class CLog: #---------------------------------------------------------------------------- def __init__(self): self.logger = logging.getLogger() fileHandler = logging.FileHandler(LOG_FILE_PATH) formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') fileHandler.setFormatter(formatHandler) self.logger.addHandler(fileHandler) self.logger.setLevel(logging.NOTSET) #---------------------------------------------------------------------------- def DebugMessage(self,msg): self.logger.debug(msg) pass oCLog = CLog()
위에서 간단한 로그 모듈을 정의했습니다. 이 간단한 코드를 사용하여 로깅 모듈을 설명하고 싶습니다
로거
로그 인스턴스를 가져오는 부분입니다. 이 부분은 코드 분리가 매우 잘되어 로그 인스턴스의 특성을 풍부하게 할 수 있습니다. 다른 핸들러를 추가하면
FileHandler
는 로그의 출력 끝이 파일임을 지정하고 파일 경로를 전달하여 출력을 지정합니다. StreamHandler와 같은 로그 및 기타 다양한 복잡한 출력 방법은 아마도 가장 일반적으로 사용되는 방법일 것이며 다른 방법은 천천히 탐색해야 합니다.
FormatHandler
FomartHandler는 FileHandler의 출력 형식을 지정합니다. 예를 들어 ('%(asctime)s %(levelname)s: %(message)s') 형식을 사용하면 출력 텍스트 형식은 다음과 같습니다.
2013-07-25 08: 20:01,525 INFO: 안녕 [127.0.0.1]:60442
asctime, levelname과 같은 형식 키워드는 LogRecord 속성 공식 문서를 참조하세요
레벨
로깅 모듈은 5가지 유형의 로그 정보에 대한 우선순위를 정의합니다
레벨사용시
DEBUG자세한 정보, 일반적으로 문제를 진단할 때만 관심이 있습니다.
INFO확인 사항 예상대로 작동하고 있습니다.
경고예상치 못한 일이 발생했거나 가까운 시일 내에 문제가 발생할 것임을 나타냅니다(예: '디스크 공간 부족').
ERRORD더 심각한 문제로 인해 소프트웨어가 일부 기능을 수행할 수 없습니다.
프로그램 자체를 계속 실행할 수 없음을 나타내는 CRITICALA 심각한 오류입니다.
우선순위 관계:
DEBUG
은 self.logger.debug(msg), self.logger.info(msg) 등의 함수를 기준으로 판단할 수 있습니다. 출력 정보 우선 순위
SetLevel
SetLevel 함수는 로그 정보를 처리하기 위한 Log 인스턴스의 우선 순위를 정의합니다. 정의된 우선 순위가 info인 경우 모든 디버그 정보가 무시됩니다. 출력단자에는 설정된 우선순위와 설정된 우선순위 이상의 정보만 입력