얼쑤의 분석 API는 시도마다 처리 결과를 한 줄로 남깁니다. 개발 환경에 따라 루트 로거에 이미 처리기가 붙어 있을 수 있어서, 모듈 처리기에서도 같은 줄을 출력하면 기록이 두 번 나타날 수 있습니다. 모듈의 처리기는 유지하고 propagate = False를 설정해 그 기록을 루트 쪽으로 다시 보내지 않도록 했습니다.

이 설정을 바꾸자 테스트에서 별도의 경로를 고려해야 했습니다. pytest의 caplog가 루트에 붙어 있는 상태에서는 이 모듈이 로그를 남겨도 캡처에 들어오지 않습니다. 검사 내용이 “서명값이 로그에 없다”뿐이면 빈 캡처에서도 통과합니다. 확인하려던 로거에 실제 이벤트가 들어오는지 먼저 확인해야 했습니다.

모듈 로거에 직접 연결한 캡처

테스트 안에서만 모듈 로거의 처리기를 caplog.handler로 교체했습니다. 그러면 루트 전파를 다시 켜지 않고도 모듈이 직접 내보낸 기록을 받을 수 있습니다. 테스트가 끝나면 monkeypatch가 원래 처리기를 복원합니다.

monkeypatch.setattr(api.log, "handlers", [caplog.handler])

합성 무음 녹음과 예외를 일으키는 입력을 보내 정상 판정 경로와 오류 경로를 각각 실행했습니다. 캡처에 result=NO_SOUND와 result=ERROR:RuntimeError가 있는지 단정하고, 예외 메시지에 넣어 둔 테스트용 서명 문자열은 없는지 확인했습니다. 앞의 두 단정은 검사하려던 로그가 도착했다는 증거이고, 마지막 단정은 그 기록에 넣지 않기로 한 값이 빠져 있다는 증거입니다.

별도의 검사에서는 모듈 로거가 부모에게 전달하지 않도록 설정됐는지도 확인했습니다. 리뷰 반영 뒤 AI 프로젝트의 pytest 전체 63개가 통과했습니다. 검증 범위는 테스트가 연결한 모듈 로거와 해당 요청 경로입니다. 서버 전체의 로그 수집기까지 확인하려면 수집된 결과에도 같은 방식으로 기대하는 이벤트와 금지할 값을 함께 대조해야 합니다.