report
HAN-266
asurada
final
2026-05-22
[HAN-266]
bridge.py 로그 다이어트 — file handler INFO + 라이브러리 로거 WARNING
확장
Summary
bridge.py:setup_logging() file handler를
DEBUG → INFO로 상향하고 noisy 라이브러리 로거 8개를
WARNING으로 명시 고정. bridge.log의 full Slack
event payload 덤프 차단 + log_monitor.py false-positive
cascade 근본 차단.
Context
사건 흐름
#pantheon-alerts에 “Process exit” 알림 반복 발생.
- Asurada 1차 분석: payload 안에
exit 1 텍스트가 우연
매칭. → log_monitor.py IGNORE_PATTERNS에 한 줄 추가하는
우회 fix 제안.
- Jarvis 자문(
feedback_root_cause_first): 우회 fix는 다음
라이브러리 페이로드에서 또 터짐. 근본 원인은
bridge.py:125 file handler가 DEBUG라서 라이브러리들이 full
request/response payload를 통째로 로그에 덤프한다는 점.
- 방향 전환 → 본 PR.
측정 데이터
| 항목 |
값 |
어제 bridge.log 크기 |
~300 MB |
| 오늘 1시간 누적 |
~79 MB |
| HAN-146 / HAN-248 계열 false-positive PR |
6+건 |
Plan / Scope
작업 항목
AC
Decisions
| 결정 |
근거 |
root.setLevel(INFO) — 우리 코드
log.debug(...) ~20개 호출 silently drop |
시작/종료/에러는 INFO+이므로 운영 가시성에 영향 없음. DEBUG
옵저버빌리티 손실 < 디스크/오탐 비용 |
| 우회 fix(IGNORE_PATTERNS 한 줄 추가) 폐기 |
feedback_root_cause_first — 보편 패턴(라이브러리 로거
WARNING 고정)과의 차이가 근본 원인 |
log_monitor.py IGNORE_PATTERNS 유지 |
라이브러리 동작 변경(예: 새 SDK 버전이 INFO에서도 payload 덤프) 대비
안전망 |
asyncio도 WARNING 명시 (기본 WARNING이라
redundant) |
의도 명시. 향후 root level 다시 내릴 때 안전 |
Risks
| 위험 |
영향 |
대응 |
jarvis logger의 DEBUG 호출 ~20개 모두 silent drop |
운영 진단 시 정보 부족 가능 |
INFO 레벨에 충분한 시작/종료/에러 로그 존재. 디버깅 필요 시 임시로
root.setLevel(DEBUG) 토글 |
| 라이브러리 로거 누락 (예: 새 의존성) |
다시 페이로드 덤프 시작 |
log_monitor.py IGNORE_PATTERNS 안전망 + 1시간 후 크기
검증 |
| 새 SDK 버전이 WARNING 레벨로 payload 덤프 |
false-positive 재발 |
IGNORE_PATTERNS + 정기 grep 모니터링 |
Result
완료된 것
- PR #97 squash merged → main
00b6aae (2026-05-22 01:20
KST)
- Linear HAN-266 Done
- 코드 리뷰 통과 (no issues found)
변경 라인
bridge.py setup_logging() (lines 117–146) — +15/−5
배운 것
- 우회 fix vs 근본 원인 진단: 같은
매니패스테이션(false-positive)이 라이브러리 layer마다 반복되면
IGNORE_PATTERNS 누적은 증상 도구화. 1차 원인(producer side =
로깅 레벨)을 끊는 게 정답.
- 라이브러리 로거는 명시 차단: Python 표준 logging은
root에 propagate.
setLevel(DEBUG) root + 라이브러리 로거
NOTSET이면 라이브러리 내부 DEBUG 다 흘러옴.
slack_bolt·slack_sdk 외에도
urllib3·httpx·httpcore·websockets가
noisy candidates.
jarvis 로거 분리 운영:
log = logging.getLogger("jarvis")를 별도 named logger로
두면, root level과 분리해 우리 코드만 DEBUG로 내릴 수 있는 옵션이 열림.
본 PR에서는 INFO 통일 선택했지만, 향후 디버깅 모드에서
jarvis만 DEBUG 토글 가능.
링크
- PR: https://github.com/hangseung/pantheon/pull/97
- Merge commit:
https://github.com/hangseung/pantheon/commit/00b6aaef81fd3a4c5c0788969631f4c88ce18d12
- Linear: https://linear.app/hangman-lab/issue/HAN-266
- 선행 패턴: PR #86 (HAN-219) — slack_bolt/slack_sdk만 WARNING 한 첫
단계