diff --git a/.gitignore b/.gitignore index 5d381cc..307d311 100644 --- a/.gitignore +++ b/.gitignore @@ -122,6 +122,8 @@ celerybeat.pid # Environments .env +.env.dev +.env.prd .venv env/ venv/ diff --git a/blog/views.py b/blog/views.py index 213630f..c8e34ec 100644 --- a/blog/views.py +++ b/blog/views.py @@ -5,12 +5,15 @@ from rest_framework.exceptions import PermissionDenied from .models import Post from .serializers import PostSerializer from .utils import verify_token_with_auth_server +import logging # 2025-04-29 + +logger = logging.getLogger(__name__) # 2025-04-29 class PostListView(generics.ListAPIView): queryset = Post.objects.all().order_by('-created_at') serializer_class = PostSerializer permission_classes = [permissions.AllowAny] - + class PostListCreateView(generics.ListCreateAPIView): queryset = Post.objects.all().order_by('-created_at') serializer_class = PostSerializer @@ -19,7 +22,16 @@ class PostListCreateView(generics.ListCreateAPIView): def perform_create(self, serializer): token = self.request.headers.get("Authorization", "").replace("Bearer ", "") verify_token_with_auth_server(token) + verify_result = verify_token_with_auth_server(token) + # 2025-04-14 로그 등록 (콘솔+FluentBit용) + if verify_result == None: + logger.info(f"Token verified") + else: + logger.info(f"Token error") + serializer.save(author_name=self.request.user.username) + post_title=serializer.save(author_name=self.request.user.username) + logger.info(f"Post titled '{post_title}' has been created.") # ✅ 조회, 수정, 삭제 전부 처리 class PostDetailView(generics.RetrieveUpdateDestroyAPIView): @@ -38,6 +50,8 @@ class PostDetailView(generics.RetrieveUpdateDestroyAPIView): if serializer.instance.author_name != self.request.user.username: raise PermissionDenied("작성자만 수정할 수 있습니다.") serializer.save() + post_title=serializer.save(author_name=self.request.user.username) + logger.info(f"Post titled '{post_title}' has been updated.") def perform_destroy(self, instance): token = self.request.headers.get("Authorization", "").replace("Bearer ", "") @@ -46,3 +60,4 @@ class PostDetailView(generics.RetrieveUpdateDestroyAPIView): if instance.author_name != self.request.user.username: raise PermissionDenied("작성자만 삭제할 수 있습니다.") instance.delete() + logger.info(f"Post titled '{instance}' has been deleted.") \ No newline at end of file diff --git a/blog_prj/settings.py b/blog_prj/settings.py index 67ec1ed..bd3405d 100644 --- a/blog_prj/settings.py +++ b/blog_prj/settings.py @@ -52,6 +52,55 @@ SECRET_KEY = os.environ.get('SECRET_KEY', 'django-insecure-ec9me^z%x7-2vwee5#qq( # SECURITY WARNING: don't run with debug turned on in production! DEBUG = int(os.environ.get('DEBUG', 1)) +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, # Django 기본 로거 유지 + 'formatters': { + 'standard': { + 'format': '[{asctime}] {levelname} {name}:{lineno} {message}', + 'style': '{', + }, + }, + 'handlers': { + 'console': { + 'class': 'logging.StreamHandler', # 콘솔 출력 + 'formatter': 'standard', + }, + }, + 'root': { + 'handlers': ['console'], + 'level': 'INFO', # 기본 레벨 (애플리케이션 코드) + }, + 'loggers': { + 'django': { + 'handlers': ['console'], + 'level': 'INFO', # Django 프레임워크 전반 + 'propagate': False, + }, + 'django.request': { + 'handlers': ['console'], + 'level': 'ERROR', # 요청 관련 에러만 (500 에러 같은 것) + 'propagate': False, + }, + 'django.db.backends': { + 'handlers': ['console'], + 'level': 'WARNING', # DB 쿼리 경고만 + 'propagate': False, + }, + 'django.security': { + 'handlers': ['console'], + 'level': 'WARNING', # 보안 관련 경고 + 'propagate': False, + }, + # mattermost send message log 너무 많이 나와서 조정 + 'apscheduler': { + 'handlers': ['console'], + 'level': 'WARNING', # INFO 로그 안 보이게 함 | 'CRITICAL'로 맞추면 사실상 아무것도 안 찍힘 + 'propagate': False, + }, + }, +} + AUTH_VERIFY_URL = os.environ.get('AUTH_VERIFY_URL', 'NONE') ALLOWED_HOSTS = ["*"] diff --git a/version b/version index de302d4..05b19b1 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.0.3_r1 \ No newline at end of file +0.0.4 \ No newline at end of file