import sys import os import logging from logging.handlers import RotatingFileHandler # UTF-8 인코딩 강제 설정 (Windows cp949 오류 방지) if sys.platform == 'win32': sys.stdout.reconfigure(encoding='utf-8') sys.stderr.reconfigure(encoding='utf-8') from app import create_app app = create_app() # 로깅 설정 - 콘솔과 파일 모두에 출력 if not os.path.exists('logs'): os.mkdir('logs') # 파일 핸들러 설정 file_handler = RotatingFileHandler('logs/server.log', maxBytes=10240000, backupCount=10) file_handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) # 콘솔 핸들러 설정 console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )) console_handler.setLevel(logging.INFO) # Flask 앱 로거 설정 app.logger.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.addHandler(console_handler) # 루트 로거 설정 (모든 로거에 적용) root_logger = logging.getLogger() root_logger.setLevel(logging.INFO) root_logger.addHandler(console_handler) # Werkzeug 로거 설정 (HTTP 요청 로깅) werkzeug_logger = logging.getLogger('werkzeug') werkzeug_logger.setLevel(logging.INFO) # Werkzeug의 기본 핸들러 제거하고 새로 추가 werkzeug_logger.handlers.clear() werkzeug_handler = logging.StreamHandler(sys.stdout) werkzeug_handler.setFormatter(logging.Formatter( '%(asctime)s - %(levelname)s - %(message)s' )) werkzeug_logger.addHandler(werkzeug_handler) app.logger.info('서버 시작') if __name__ == '__main__': try: print(f"[{__name__}] 서버 시작: http://0.0.0.0:5001") print(f"[{__name__}] 로그는 콘솔과 logs/server.log 파일에 기록됩니다.") app.run(host='0.0.0.0', port=5001, debug=True, use_reloader=False) except Exception as e: print(f"서버 시작 오류: {e}") import traceback traceback.print_exc()