Files
AutoCoinTrader/docs/log_system_improvements.md
2025-12-09 21:39:23 +09:00

232 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 로그 시스템 개선 (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
**상태**: ✅ 프로덕션 준비 완료