Python3 Logging Module : Logger Adapter

Logger Adapter 사용

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

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

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

라고 설명한다.

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

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

따라서 extrakey(Logger Adapter에서만 제공되는 기능)를 추가하는 것을 제외하면 Logger Adapter를 사용하는 방법이 Logger 사용법과 동일하다. Logger Adapter의 함수를 호출하면 내부에서 생성 시 전달된 Logger Instance에서 Logger 함수를 호출하기 때문이다.

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

LoggerAdapter 파생 함수 작성

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

#Python3 #logging #LoaggerAdapter

error: Content is protected !!