Skip to content

Commit 507108c

Browse files
authored
Merge pull request #244 from EAT-SSU/feature/#243-plg-logging-stack
feat: 로깅 기능 구현
2 parents 5b371ec + 58aeebd commit 507108c

21 files changed

Lines changed: 384 additions & 23 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ jobs:
8383
sudo docker rm -f $(docker ps -qa)
8484
sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod
8585
sudo docker run -d -p 9000:9000 \
86+
--log-driver=json-file \
87+
--log-opt max-size=20m \
88+
--log-opt max-file=5 \
8689
-e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \
8790
-e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \
8891
-e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \
@@ -107,6 +110,9 @@ jobs:
107110
sudo docker rm -f $(docker ps -qa)
108111
sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev
109112
sudo docker run -d -p 9000:9000 \
113+
--log-driver=json-file \
114+
--log-opt max-size=20m \
115+
--log-opt max-file=5 \
110116
-e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \
111117
-e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \
112118
-e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar
2222
EXPOSE 9000
2323

2424
# 애플리케이션 실행
25-
ENTRYPOINT ["java", "-jar", "app.jar"]
25+
ENTRYPOINT ["java", "-jar", "app.jar"]

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def generated = 'src/main/generated'
8080

8181
tasks.withType(JavaCompile) {
8282
options.getGeneratedSourceOutputDirectory().set(file(generated))
83+
options.compilerArgs += ['-parameters']
8384
}
8485

8586
sourceSets {
@@ -88,4 +89,4 @@ sourceSets {
8889

8990
clean {
9091
delete file('src/main/generated')
91-
}
92+
}

src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package ssu.eatssu.domain.auth.dto;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import ssu.eatssu.global.log.annotation.LogMask;
45

56
@Schema(title = "애플 로그인 및 회원가입")
67
public record AppleLoginRequest(
8+
@LogMask
79
@Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...")
810
String identityToken
911
) {

src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.validation.constraints.Email;
55
import jakarta.validation.constraints.NotBlank;
6+
import ssu.eatssu.global.log.annotation.LogMask;
67

78
@Schema(title = "카카오 로그인 및 회원가입")
89
public record KakaoLoginRequest(
10+
@LogMask
911
@NotBlank(message = "이메일을 입력해주세요.")
1012
@Email(message = "올바른 이메일 주소를 입력해주세요.")
1113
@Schema(description = "이메일", example = "test@email.com")
1214
String email,
1315

16+
@LogMask
1417
@Schema(description = "providerId", example = "10378247832195")
1518
String providerId
1619
) {

src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.validation.constraints.NotBlank;
5+
import ssu.eatssu.global.log.annotation.LogMask;
56

67
@Schema(title = "유효한 토큰 확인")
78
public record ValidRequest(
9+
@LogMask
810
@NotBlank(message = "토큰을 입력해주세요")
911
@Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw")
1012
String token

src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
import io.swagger.v3.oas.annotations.media.Schema;
44
import lombok.Getter;
55
import lombok.NoArgsConstructor;
6+
import ssu.eatssu.global.log.annotation.LogMask;
67

78
@Schema(title = "문의 남기기")
89
@NoArgsConstructor
910
@Getter
1011
public class CreateInquiryRequest {
1112

1213
@Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com")
14+
@LogMask
1315
private String email;
1416

1517
@Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다")
18+
@LogMask
1619
private String content;
1720
}

src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ssu.eatssu.domain.inquiry.service;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.springframework.context.ApplicationEventPublisher;
45
import org.springframework.stereotype.Service;
56
import org.springframework.transaction.annotation.Transactional;
67
import ssu.eatssu.domain.auth.security.CustomUserDetails;
@@ -10,6 +11,7 @@
1011
import ssu.eatssu.domain.user.entity.User;
1112
import ssu.eatssu.domain.user.repository.UserRepository;
1213
import ssu.eatssu.global.handler.response.BaseException;
14+
import ssu.eatssu.global.log.event.LogEvent;
1315

1416
import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER;
1517

@@ -20,14 +22,23 @@ public class InquiryService {
2022

2123
private final UserRepository userRepository;
2224
private final InquiryRepository inquiryRepository;
25+
private final ApplicationEventPublisher eventPublisher;
2326

2427
public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) {
2528
User user = userRepository.findById(userDetails.getId())
26-
.orElseThrow(() -> new BaseException(NOT_FOUND_USER));
29+
.orElseThrow(() -> new BaseException(NOT_FOUND_USER));
2730

2831
Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail());
32+
Inquiry saved = inquiryRepository.save(inquiry);
2933

30-
return inquiryRepository.save(inquiry);
34+
eventPublisher.publishEvent(LogEvent.of(String.format(
35+
"Inquiry created: id=%d, userId=%d, status=%s",
36+
saved.getId(),
37+
user.getId(),
38+
saved.getStatus()
39+
)));
40+
41+
return saved;
3142
}
3243

3344
}

src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import lombok.NoArgsConstructor;
77
import ssu.eatssu.domain.menu.entity.Meal;
88
import ssu.eatssu.domain.menu.entity.MealMenu;
9+
import ssu.eatssu.domain.menu.entity.Menu;
910

1011
import java.util.List;
1112

@@ -18,9 +19,8 @@ public class MenusInMealResponse {
1819
@Schema(description = "식단 속 메뉴 목록", example = "[]")
1920
private List<BriefMenuResponse> briefMenus;
2021

21-
public static MenusInMealResponse from(Meal meal) {
22-
List<BriefMenuResponse> menusInformation = meal.getMealMenus().stream()
23-
.map(MealMenu::getMenu)
22+
public static MenusInMealResponse from(List<Menu> menus) {
23+
List<BriefMenuResponse> menusInformation = menus.stream()
2424
.map(BriefMenuResponse::new)
2525
.toList();
2626

src/main/java/ssu/eatssu/domain/menu/service/MealService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,15 @@ public class MealService {
3939
public MenusInMealResponse getMenusInMealByMealId(Long mealId) {
4040
Meal meal = mealRepository.findById(mealId)
4141
.orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL));
42+
List<Menu> menus = meal.getMealMenus().stream()
43+
.map(MealMenu::getMenu)
44+
.toList();
45+
46+
if (menus.isEmpty()) {
47+
log.warn("Meal[{}] has no menus.", mealId);
48+
}
4249

43-
return MenusInMealResponse.from(meal);
50+
return MenusInMealResponse.from(menus);
4451
}
4552

4653
public List<MealDetailResponse> getMealDetailsByDateAndRestaurantAndTimePart(

0 commit comments

Comments
 (0)