: Logger Adapter Python 3 Logging Module

LoggerAdapter 사용

Logger Adapter는 Logger 인스턴스가 Message를 출력할 때 원래 Format으로 제공되던 항목 이외의 추가적인 정보를 포함하기 위해 사용된다. Logger Adapter 인스턴스를 생성하면 회원모드인 process 함수를 이용하여 받은 Message에 새로운 정보를 추가한다. 당연히 Message를 출력하고자 하면 새로운 정보가 추가된 Message가 출력된다.

Logger Adapter 문서(https://docs.python.org/ko/3/howto/logging-cookbook.html#context-info))에 가면

두 유형의 인스턴스를 같은 의미로 사용할 수 있습니다.’

라고 설명한다.

처음이라면 이해하기 어려운 이 문장의 의미는 다음과 같다.위의 코드를 보면 logger라는 변수는 Logger 인스턴스에서 먼저 생성된 후 Logger Adpater 인스턴스로 바뀌는 것처럼 보인다.

그런데 Logger Adapter 생성자에게는 미리 생성된 Logger 객체가 인수로 전달된다. 덕분에 로깅 데이터가 먼저 생성된 로깅 데이터를 회원 요소로 가지게 된다. 또한 Logger Adapter에는 Logger에서 제공되는 함수가 모두 포함되어 있다.

따라서 extra key (Logger Adapter에서만 제공되는 기능)를 추가하는 것을 제외하면 Logger Adapter를 사용하는 방법이 Logger 사용방법과 동일하다. Logger Adapter의 함수를 호출하면 내부에서 생성 시 받은 Logger 인스턴스에서 Logger 함수를 호출하기 때문이다.

결국 “두 가지 유형의 인스턴스를 동일한 의미로 사용할 수 있다”는 Logger Adapter 인스턴스와 Logger 인스턴스의 사용법이 같으므로 사용자가 두 인스턴스를 명확하게 구분할 필요가 없다는 뜻이다.

Logger Adapter 파생 함수 만들기

Logger Adapter를 사용하면 기본적으로 장착된 함수가 생각대로 작동하지 않을 수 있다. 그럴 때는 Logger Adapter의 파생 Class를 직접 구현해서 필요한 기능을 추가하거나 기존의 함수를 override 하면 된다.위의 내용은 LoggerAdpater의 process 함수를 override 한 것이다.원본 프로세스에는 kwargs[“extra”] = self.extra 라는 문장이 return 문 위에 작성되어 있다. log 출력할 때마다 extra 값을 입력된 값으로 바꿔서 출력하고 싶었기 때문에 해당 문장을 삭제하고 내가 필요로 하는 기능을 쉽게 구현할 수 있었다.

Python 3 # logging # LoaggerAdapter

error: Content is protected !!