클래스 이름을 직접 문자열로 쓰지 않고서도 로그 메시지에 클래스 이름을 나타내는 방법은 logging.Logger 클래스의 getChild() 메서드를 사용하는 것입니다. 이를 통해 자식 로거를 생성하고, 이 자식 로거에 클래스 이름을 전달하여 로그 메시지를 출력할 수 있습니다.
다음은 getChild() 메서드를 사용하여 클래스 이름을 로그 메시지에 포함하는 방법을 보여주는 예제 코드입니다.
import logging
# 전역 로그 설정
logging.basicConfig(level=logging.DEBUG)
# 커스텀 포매터 정의
class CustomFormatter(logging.Formatter):
def format(self, record):
# 클래스 이름과 위치 정보를 추가하여 로그 메시지 포맷 설정
log_msg = f"{record.levelname}: {record.pathname}:{record.lineno}: {record.msg}"
return log_msg
# 전역 로거에 커스텀 포매터 설정
formatter = CustomFormatter()
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.getLogger().addHandler(handler)
# MyClass 클래스 정의
class MyClass(object):
def __init__(self):
self._logger = logging.getLogger("MyClass")
def do_something(self):
# getChild() 메서드를 사용하여 자식 로거 생성
logger = self._logger.getChild(self.__class__.__name__)
logger.debug("Debug message from MyClass")
logger.info("Info message from MyClass")
logger.warning("Warning message from MyClass")
logger.error("Error message from MyClass")
logger.critical("Critical message from MyClass")
# MyClass 인스턴스 생성
my_class = MyClass()
# MyClass에서 로그 메시지 출력
my_class.do_something()
위 코드에서 self.__class__.__name__을 사용하여 MyClass 클래스의 이름을 문자열로 얻어옵니다. 그리고 getChild() 메서드를 호출하여 해당 이름을 가진 자식 로거를 생성합니다. 이렇게 생성한 자식 로거를 통해 로그 메시지를 출력하면, 로그에 클래스 이름이 자동으로 포함되어 출력됩니다. 출력 결과는 아래와 같습니다.
DEBUG: test.py:26: MyClass: Debug message from MyClass
INFO: test.py:27: MyClass: Info message from MyClass
WARNING: test.py:28: MyClass: Warning message from MyClass
ERROR: test.py:29: MyClass: Error message from MyClass
CRITICAL: test.py:30: MyClass: Critical message from MyClass
이렇게 하면 클래스 이름을 직접 문자열로 작성하지 않고서도 로그 메시지에 클래스 이름을 포함하여 출력할 수 있습니다.
해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.
'Language > Python' 카테고리의 다른 글
루트로거, 차일드로거 (0) | 2023.07.23 |
---|---|
파이썬 로깅 포맷 문자열 (0) | 2023.07.23 |
로그 핸들러 추가 방법 (0) | 2023.07.20 |
Log handler (0) | 2023.07.20 |
파이썬 로그 설정 (0) | 2023.07.20 |