Update: Apply industry standard logging practices - separate module, dual handlers, JSON format
This commit is contained in:
parent
d3faba29c7
commit
c62a1b9b27
@ -34,23 +34,13 @@
|
||||
| 250716_robeing_db_separation | FileHandler로 파일 저장 | 미구현 |
|
||||
| 360_로빙_컨테이너_경량화 | 호스트에서 HDD 심링크 | 미구현 |
|
||||
|
||||
## 결정 필요 사항
|
||||
## 결정 사항 (표준 방식)
|
||||
|
||||
1. **로깅 전략 선택**:
|
||||
- A. Docker 로그만 사용 (현재 상태 유지)
|
||||
- B. FileHandler 추가하여 파일 로깅 구현
|
||||
- 결정 필요
|
||||
|
||||
2. **파일 로깅 선택 시**:
|
||||
- 로그 파일 위치: /code/logs/ 또는 다른 경로
|
||||
- 로그 로테이션: TimedRotatingFileHandler 사용 여부
|
||||
- 결정 필요
|
||||
|
||||
3. **HDD 저장 방법**:
|
||||
- SSHFS 마운트
|
||||
- 크론잡 동기화
|
||||
- 심링크
|
||||
- 결정 필요
|
||||
1. **로깅 구조**: app/core/logger.py 모듈 생성 (main.py 직접 수정 X)
|
||||
2. **핸들러 구성**: StreamHandler + RotatingFileHandler 동시 사용
|
||||
3. **로테이션**: 10MB 단위 (TimedRotating보다 예측 가능)
|
||||
4. **포맷**: JSON 구조화 로그 (분석/파싱 용이)
|
||||
5. **HDD 저장**: 우선 로컬 파일 로깅 구현, HDD 동기화는 별도 작업
|
||||
|
||||
## 즉시 확인 필요
|
||||
|
||||
@ -58,29 +48,39 @@
|
||||
2. SSHFS 설정 여부
|
||||
3. 크론잡 등록 여부
|
||||
|
||||
## 구현 방안 (결정 후)
|
||||
## 구현 방안 (업계 표준)
|
||||
|
||||
```python
|
||||
# main.py 수정 예시 (FileHandler 추가 시)
|
||||
# app/core/logger.py 생성
|
||||
import logging.handlers
|
||||
import json
|
||||
|
||||
# 기존 코드
|
||||
logging.basicConfig(level=log_level)
|
||||
|
||||
# 추가 필요 코드
|
||||
if os.path.exists('/code/logs'):
|
||||
file_handler = logging.handlers.TimedRotatingFileHandler(
|
||||
'/code/logs/rb8001_app.log',
|
||||
when='midnight',
|
||||
interval=1,
|
||||
def setup_logging():
|
||||
# 1. StreamHandler (콘솔)
|
||||
console = logging.StreamHandler()
|
||||
|
||||
# 2. RotatingFileHandler (파일 - 10MB 로테이션)
|
||||
file_handler = logging.handlers.RotatingFileHandler(
|
||||
'/code/logs/rb8001.log',
|
||||
maxBytes=10*1024*1024, # 10MB
|
||||
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. 로깅 전략 결정
|
||||
2. 구현 방법 선택
|
||||
3. 코드 수정 및 테스트
|
||||
4. 서버 배포
|
||||
1. app/core/logger.py 생성
|
||||
2. main.py에서 setup_logging() 호출
|
||||
3. rb8001/logs 디렉토리 생성 및 .gitignore 추가
|
||||
4. 로컬 테스트 후 서버 배포
|
||||
Loading…
x
Reference in New Issue
Block a user