Update: Apply industry standard logging practices - separate module, dual handlers, JSON format

This commit is contained in:
happybell80 2025-09-08 12:10:56 +09:00
parent d3faba29c7
commit c62a1b9b27

View File

@ -34,23 +34,13 @@
| 250716_robeing_db_separation | FileHandler로 파일 저장 | 미구현 | | 250716_robeing_db_separation | FileHandler로 파일 저장 | 미구현 |
| 360_로빙_컨테이너_경량화 | 호스트에서 HDD 심링크 | 미구현 | | 360_로빙_컨테이너_경량화 | 호스트에서 HDD 심링크 | 미구현 |
## 결정 필요 사항 ## 결정 사항 (표준 방식)
1. **로깅 전략 선택**: 1. **로깅 구조**: app/core/logger.py 모듈 생성 (main.py 직접 수정 X)
- A. Docker 로그만 사용 (현재 상태 유지) 2. **핸들러 구성**: StreamHandler + RotatingFileHandler 동시 사용
- B. FileHandler 추가하여 파일 로깅 구현 3. **로테이션**: 10MB 단위 (TimedRotating보다 예측 가능)
- 결정 필요 4. **포맷**: JSON 구조화 로그 (분석/파싱 용이)
5. **HDD 저장**: 우선 로컬 파일 로깅 구현, HDD 동기화는 별도 작업
2. **파일 로깅 선택 시**:
- 로그 파일 위치: /code/logs/ 또는 다른 경로
- 로그 로테이션: TimedRotatingFileHandler 사용 여부
- 결정 필요
3. **HDD 저장 방법**:
- SSHFS 마운트
- 크론잡 동기화
- 심링크
- 결정 필요
## 즉시 확인 필요 ## 즉시 확인 필요
@ -58,29 +48,39 @@
2. SSHFS 설정 여부 2. SSHFS 설정 여부
3. 크론잡 등록 여부 3. 크론잡 등록 여부
## 구현 방안 (결정 후) ## 구현 방안 (업계 표준)
```python ```python
# main.py 수정 예시 (FileHandler 추가 시) # app/core/logger.py 생성
import logging.handlers import logging.handlers
import json
# 기존 코드 def setup_logging():
logging.basicConfig(level=log_level) # 1. StreamHandler (콘솔)
console = logging.StreamHandler()
# 추가 필요 코드 # 2. RotatingFileHandler (파일 - 10MB 로테이션)
if os.path.exists('/code/logs'): file_handler = logging.handlers.RotatingFileHandler(
file_handler = logging.handlers.TimedRotatingFileHandler( '/code/logs/rb8001.log',
'/code/logs/rb8001_app.log', maxBytes=10*1024*1024, # 10MB
when='midnight',
interval=1,
backupCount=30 backupCount=30
) )
logging.getLogger().addHandler(file_handler)
# 3. JSON 포맷터
formatter = logging.Formatter(
'{"time":"%(asctime)s","level":"%(levelname)s","msg":"%(message)s"}'
)
# 4. Uvicorn 통합
logging.getLogger("uvicorn").propagate = True
logging.basicConfig(handlers=[console, file_handler],
level=logging.INFO)
``` ```
## 다음 단계 ## 구현 순서
1. 로깅 전략 결정 1. app/core/logger.py 생성
2. 구현 방법 선택 2. main.py에서 setup_logging() 호출
3. 코드 수정 및 테스트 3. rb8001/logs 디렉토리 생성 및 .gitignore 추가
4. 서버 배포 4. 로컬 테스트 후 서버 배포