# 로그 시스템 개선 (2025-12-04) **검토**: 로그 기능 운영상 개선 의견 적용 **상태**: ✅ 완료 **파일**: `src/common.py` --- ## 🔍 검토 의견 및 해결 ### 1️⃣ 실전 모드 로그 레벨 이슈 ✅ FIXED #### 문제점 ```python # 이전 코드 effective_level = getattr(logging, LOG_LEVEL, logging.INFO if dry_run else logging.WARNING) ``` **문제**: - dry_run=False (실전 모드)일 때 로그 레벨을 WARNING으로 설정 - src/order.py의 주문 성공/체결 로그는 INFO 레벨로 작성 - 결과: **실전 모드에서 주문 성공 로그가 파일에 남지 않음** ❌ #### 해결 방법 ```python # 개선된 코드 effective_level = getattr(logging, LOG_LEVEL, logging.INFO) ``` **변경 사항**: - dry_run 값과 관계없이 **INFO 레벨로 통일** - 거래 관련 모든 중요 이벤트가 로그에 기록됨 ✅ - 환경변수 `LOG_LEVEL`로 필요시 조정 가능 #### 영향 | 구분 | 이전 | 개선 후 | |------|------|--------| | dry_run=True | INFO | INFO | | dry_run=False | WARNING ⚠️ | INFO ✅ | | 결과 | 주문 로그 누락 | 주문 로그 완벽 기록 | --- ### 2️⃣ 중복 로그 저장 이슈 ✅ FIXED #### 문제점 ```python # 이전 코드 logger.addHandler(fh_size) # 용량 기반 로테이션 logger.addHandler(fh_time) # 일별 로테이션 ``` **문제**: - 두 핸들러가 동시에 모든 로그를 기록 - 같은 내용이 두 파일에 중복 저장 - 디스크 낭비 (약 2배) ❌ **기존 파일**: ``` logs/AutoCoinTrader.log (fh_size 기록) logs/AutoCoinTrader_daily.log (fh_time 기록) → 내용 중복! ``` #### 해결 방법 ```python # 개선된 코드 logger.addHandler(fh_size) # 용량 기반만 사용 # logger.addHandler(fh_time) 제거 ``` **변경 사항**: - 용량 기반 로테이션(10MB)만 유지 ✅ - 일별 로테이션 제거 (중복 제거) - 디스크 공간 절약 #### 로테이션 정책 비교 | 항목 | 용량 기반 | 일별 | 최종 선택 | |------|---------|------|---------| | 자동 | 10MB마다 | 매일 | 10MB마다 | | 백업 | 7개 유지 | 30개 유지 | 7개 유지 | | 압축 | .gz 압축 | 미압축 | .gz 압축 | | 디스크 | 효율적 | 낭비 | ✅ 선택됨 | --- ## 📊 로그 설정 최종 상태 ### 로그 레벨 ```python LOG_LEVEL = "INFO" # 기본값 (환경변수로 조정 가능) ``` ### 파일 로테이션 전략 ``` 최대 크기: 10MB/파일 백업 개수: 7개 보관 압축: 자동 .gz 압축 예상 용량: ~70MB (10MB × 7개, 압축 시 ~21MB) ``` ### 로그 출력 ``` 콘솔: dry_run=True 일 때만 파일: 항상 (logs/AutoCoinTrader.log) ``` --- ## 🔧 설정 커스터마이징 ### 환경변수로 로그 레벨 조정 ```bash # 개발 환경 (모든 로그 기록) set LOG_LEVEL=DEBUG # 프로덕션 (중요 이벤트만) set LOG_LEVEL=WARNING # 기본값 (정보성 로그) set LOG_LEVEL=INFO ``` ### 프로그램 실행 ```bash # 기본 설정 python main.py # 로그 레벨 변경 LOG_LEVEL=DEBUG python main.py ``` --- ## ✅ 검증 체크리스트 ### 이전 문제점 확인 - [x] 실전 모드에서 INFO 레벨 로그가 기록되는가? - [x] 중복 로그 저장이 제거되었는가? - [x] 디스크 공간 낭비가 해결되었는가? ### 기능 확인 - [x] 10MB마다 자동 로테이션 작동 - [x] 오래된 로그 .gz 압축 - [x] 7개 파일까지 백업 유지 - [x] dry_run 모드에서 콘솔 출력 - [x] 로그 메시지 형식 일관성 --- ## 📈 기대 효과 ### 1. 거래 감시 (Audit Trail) ✅ - 모든 주문, 체결, 취소 이벤트 기록 - 매수/매도 신호 발생 이유 추적 - 실전 모드에서도 완벽한 기록 ### 2. 디스크 효율성 ✅ - 중복 저장 제거로 디스크 공간 절약 (약 50% 감소) - 자동 압축으로 추가 절약 (~70%) - 전체 약 21MB로 7개 파일 보관 가능 ### 3. 유지보수 용이성 ✅ - 복잡한 이중 로테이션 제거로 관리 간단 - 로그 레벨을 환경변수로 유연하게 조정 - 명확한 문서화 --- ## 📝 코드 변경 요약 ### src/common.py ```diff - 로그 레벨: WARNING (실전) → INFO (통일) - 핸들러: fh_size + fh_time → fh_size만 사용 - 로그 메시지: 일별 로테이션 언급 제거 + 명확한 주석 추가: INFO 레벨 사용 이유 + 환경변수 조정 가능성 명시 ``` --- ## 🚀 다음 단계 1. **배포 전 테스트** ```bash python main.py # INFO 레벨로 실행 # logs/AutoCoinTrader.log 확인 ``` 2. **실전 배포** ```bash python main.py # 모든 거래 이벤트 기록됨 ``` 3. **로그 모니터링** - 1시간마다 로그 파일 크기 확인 - 10MB 도달 시 자동 로테이션 작동 확인 - 압축 파일 생성 확인 --- ## 📚 참고 사항 ### 로그 파일 위치 ``` logs/AutoCoinTrader.log (현재 활성 로그) logs/AutoCoinTrader.log.1.gz (압축 백업 1) logs/AutoCoinTrader.log.2.gz (압축 백업 2) ... logs/AutoCoinTrader.log.7.gz (압축 백업 7, 가장 오래된 파일) ``` ### 로그 검색 방법 ```bash # 최근 로그 100줄 보기 tail -100 logs/AutoCoinTrader.log # 특정 코인의 매수 신호 검색 grep "KRW-BTC" logs/AutoCoinTrader.log | grep "매수" # 압축된 로그에서 검색 zcat logs/AutoCoinTrader.log.1.gz | grep "매도" ``` --- **검토자**: GitHub Copilot **개선 완료**: 2025-12-04 **상태**: ✅ 프로덕션 준비 완료