feat: 이벤트 로깅 시스템 추가 및 주요 컴포넌트 로깅 통합

This commit is contained in:
2025-08-28 12:24:55 +09:00
parent f0ddc5aebe
commit 4f3611e45d
9 changed files with 306 additions and 7 deletions

View File

@@ -5,6 +5,7 @@ from googleapiclient.http import MediaFileUpload
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from event_logger import get_logger
class GoogleDriveUploader:
def __init__(self, config_path='./config.json'):
@@ -52,6 +53,7 @@ class GoogleDriveUploader:
"""
파일을 Google Drive에 업로드
"""
logger = get_logger()
if self.service is None:
raise RuntimeError('Google Drive API가 초기화되지 않았습니다. credentials.json과 folder_id를 설정하세요.')
@@ -71,11 +73,15 @@ class GoogleDriveUploader:
media_body=media,
fields='id'
).execute()
print(f'파일 업로드 완료: {file_name} (ID: {file.get("id")})')
return file.get('id')
fid = file.get('id')
print(f'파일 업로드 완료: {file_name} (ID: {fid})')
if logger:
logger.log_event("drive_upload", name=file_name, id=fid)
return fid
except Exception as e:
print(f'업로드 실패: {e}')
if logger:
logger.log_event("drive_upload_error", name=file_name, error=str(e))
return None
def upload_data_as_json(self, data, filename='collected_data.json'):
@@ -83,6 +89,7 @@ class GoogleDriveUploader:
데이터를 JSON 파일로 변환하여 업로드
"""
import tempfile
logger = get_logger()
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
json.dump(data, f, ensure_ascii=False, indent=2)
@@ -90,9 +97,19 @@ class GoogleDriveUploader:
try:
file_id = self.upload_file(temp_path, filename)
logger = get_logger()
if logger and logger.preview_saved_files:
try:
with open(temp_path, 'r', encoding='utf-8') as rf:
content = rf.read(logger.preview_limit)
logger.log_event("file_preview", name=filename, preview=content)
except Exception:
pass
return file_id
finally:
os.unlink(temp_path)
if logger:
logger.log_event("tempfile_cleanup", path=temp_path)
def list_files(self):
"""
@@ -109,9 +126,15 @@ class GoogleDriveUploader:
).execute()
items = results.get('files', [])
logger = get_logger()
if logger:
logger.log_event("drive_list", count=len(items))
return items
except Exception as e:
print(f'파일 목록 조회 실패: {e}')
logger = get_logger()
if logger:
logger.log_event("drive_list_error", error=str(e))
return []
class SimpleDriveSaver:
@@ -132,9 +155,22 @@ class SimpleDriveSaver:
with open(filepath, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f'데이터 저장 완료: {filepath}')
logger = get_logger()
if logger:
logger.log_event("file_saved", path=filepath, bytes=os.path.getsize(filepath))
if logger.preview_saved_files:
try:
with open(filepath, 'r', encoding='utf-8') as rf:
preview = rf.read(logger.preview_limit)
logger.log_event("file_preview", path=filepath, preview=preview)
except Exception:
pass
return filepath
except Exception as e:
print(f'저장 실패: {e}')
logger = get_logger()
if logger:
logger.log_event("file_save_error", path=filepath, error=str(e))
return None
def save_text_data(self, data, filename='collected_data.txt'):
@@ -150,9 +186,15 @@ class SimpleDriveSaver:
else:
f.write(str(data))
print(f'텍스트 데이터 저장 완료: {filepath}')
logger = get_logger()
if logger:
logger.log_event("file_saved", path=filepath, bytes=os.path.getsize(filepath))
return filepath
except Exception as e:
print(f'저장 실패: {e}')
logger = get_logger()
if logger:
logger.log_event("file_save_error", path=filepath, error=str(e))
return None
def save_to_drive_simple(data, filename='collected_data.json', mount_path='/content/drive/MyDrive/AI_Data'):