피드로 돌아가기
Dev.toDevOps
원문 읽기
Non-JSON Noise를 허용하는 Zero-Dependency 로그 필터 logtidy 설계
jq chokes on real-world log streams. So I built a tiny tool that doesn't.
AI 요약
Context
로그 스트림 내 JSON 외 텍스트 혼재 시 jq와 같은 엄격한 JSON 파서가 파이프라인을 중단시키는 한계점 발생. 실무 로그의 비정형 특성을 무시한 엄격한 스키마 검증으로 인한 컨텍스트 유실 및 런타임 오류 빈번.
Technical Solution
- Non-JSON 입력 발생 시 원문 그대로를 출력하는 Pass-through 메커니즘을 통한 파이프라인 생존성 확보
- timestamp, level, message 등 주요 필드에 대한 다중 매핑 딕셔너리를 적용한 Logger Dialects 호환성 설계
- 중첩 객체를 Dot-path 형태로 변환하는 Flattening 로직을 통해 가독성 높은 Key=Value 포맷 생성
- I/O와 상태를 분리한 순수 함수
formatLine기반 설계로 Node.js와 Python 환경 간 동일한 출력 결과 보장 - Date 객체 사용을 배제하고 문자열 슬라이싱 및 정수 연산만으로 처리하는 Deterministic Timestamp 로직 구현
- EPIPE 예외 처리를 통해 파이프라인 종료 시 Traceback 없이 Clean Exit 하는 필터 구조 채택
실천 포인트
- 스트림 처리 도구 설계 시 입력 데이터의 '불순물(Noise)'을 예외가 아닌 정상 흐름으로 처리하는 설계 검토 - 다국어 런타임 지원 시 비즈니스 로직을 Pure Function으로 격리하여 테스트 벡터를 공유하는 전략 활용 - 타임존 및 런타임별 날짜 처리 라이브러리의 차이를 피하기 위한 원시 문자열/정수 기반 처리 방식 고려