코딩기록 저장소 🐕/spring(JPA)🌱

SpringLogger

kimkongmom 2023. 10. 10. 16:21

 

 

 

 

 

▶ ContactController

 

Logger 설정: 코드 상단에는 Logger 객체가 설정되어 있습니다. 

이것은 로깅을 위한 것으로, 코드 실행 중에 중요한 정보를 로그로 남기는 데 사용됩니다.

 

이렇게 lombok 사용!하는게 더 편리



ContactService 주입: ContactController 클래스는 ContactService를 주입받습니다. 

이것은 비즈니스 로직을 처리하는 서비스 레이어입니다.

 

URL Mapping: 각 메서드에 @GetMapping 또는 @PostMapping 어노테이션을 사용하여 URL을 매핑하고,

해당 URL로 들어온 요청을 처리합니다.
/contact/list.do: 연락처 목록을 조회하는 페이지를 렌더링합니다.
/contact/write.do: 새 연락처를 작성하는 페이지를 렌더링합니다.
/contact/add.do: 새 연락처를 추가합니다.
/contact/detail.do: 특정 연락처의 상세 정보를 조회합니다.
/contact/modify.do: 연락처 정보를 수정합니다.
/contact/delete.do: 연락처를 삭제합니다.

 

Model 객체: Model 객체를 사용하여 뷰로 데이터를 전달합니다. 연락처 목록 조회 결과를 contactList라는 이름으로 모델에 추가합니다.

RedirectAttributes: 리다이렉트 시에도 데이터를 전달하기 위해 RedirectAttributes를 사용합니다. 연락처 추가, 수정, 삭제 결과를 addResult, modifyResult, deleteResult라는 속성으로 추가합니다.

 

매개변수 사용: @RequestParam 어노테이션을 사용하여 HTTP 요청 파라미터를 메서드의 매개변수로 받아옵니다.

리다이렉트: 리다이렉트는 사용자를 다른 페이지로 보내는 기능을 합니다. 예를 들어, 연락처를 추가한 후에는 연락처 목록 페이지로 리다이렉트됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.gdu.app09.controller;
 
import java.util.List;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
import com.gdu.app09.dto.ContactDto;
import com.gdu.app09.service.ContactService;
 
import lombok.RequiredArgsConstructor;
 
@RequiredArgsConstructor
@Controller
public class ContactController {
  
  // ContactController를 실행할 때 org.sl4f.Logget가 동작한다.
  private static final Logger logger = LoggerFactory.getLogger(ContactController.class);
 
  private final ContactService contactService;
  
  @GetMapping(value="/contact/list.do")
  public String list(Model model) {
    List<ContactDto> contactList = contactService.getContactList();
    model.addAttribute("contactList", contactService.getContactList());
    logger.info(contactList.toString());
    return "contact/list";
  }
  @GetMapping(value="/contact/write.do")
  public String write() {
    return "contact/write";
  }
  @PostMapping(value="/contact/add.do")
  public String add(ContactDto contactDto, RedirectAttributes redirectAttributes) {
    int addResult = contactService.addContact(contactDto);
    redirectAttributes.addFlashAttribute("addResult", addResult);
    return "redirect:/contact/list.do";
  }
  @GetMapping(value="/contact/detail.do")
  public String detail(@RequestParam(value="contact_no", required=false, defaultValue="0")int contact_no, Model model) {
    model.addAttribute("contact", contactService.getContactByNo(contact_no));
    return "contact/detail";
  }
  @PostMapping(value="/contact/modify.do")
  public String modify(ContactDto contactDto, RedirectAttributes redirectAttributes) {
    int modifyResult = contactService.modifyContact(contactDto);
    redirectAttributes.addFlashAttribute("modifyResult", modifyResult);
    return "redirect:/contact/detail.do?contact_no=" + contactDto.getContact_no();
  }
  @PostMapping(value = "contact/delete.do")
  public String delete(@RequestParam(value="contact_no", required=false, defaultValue="0")int contact_no, RedirectAttributes redirectAttributes) {
    int deleteResult = contactService.deleteContact(contact_no);
    redirectAttributes.addFlashAttribute("deleteResult", deleteResult);
    return "redirect:/contact/list.do";
  }
 
cs

 

 

 

XML 구성 파일은 Logback이라는 로깅 프레임워크를 사용하여 로그를 설정하는 데 사용됩니다.

 

Appenders (로그 출력 대상 설정):
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">:

콘솔에 로그를 출력하는 Appender 설정입니다. 콘솔에 로그를 출력하는 데 사용됩니다.


<appender name="file" class="ch.qos.logback.core.FileAppender">: 

파일에 로그를 출력하는 Appender 설정입니다. /log/app09_log.log 파일에 로그를 저장하며, 

기존 로그에 이어서 기록하도록 설정되어 있습니다.

<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">: 

매일 새로운 로그 파일을 만드는 RollingFileAppender 설정입니다. 

로그 파일 이름은 날짜 및 숫자 인덱스로 구성되며, 로그 파일 크기가 100MB를 넘으면 새 파일을 만듭니다. 

최대 30일치 로그를 유지하고, 총 로그 파일 크기는 3GB로 제한됩니다.

Log 패턴 설정:
<encoder> 내부의 <pattern>: 로그 출력 패턴을 설정합니다. 

패턴 내에 %d, %level, %logger, %msg 등의 특수 문자열을 사용하여 로그 출력 형식을 지정합니다. 

%d는 로그 기록 시간, %level은 로그 레벨, %logger는 로그를 찍는 클래스, %msg는 로그 메시지를 의미합니다.


Logger 설정:
<logger name="com.gdu.app09" level="info" />: 

com.gdu.app09 패키지에 속하는 클래스의 로그 레벨을 info로 설정합니다. 

이 패키지의 클래스들은 info 레벨 이상의 로그를 출력합니다.

<logger name="org.springframework" level="info" />: Spring Framework의 로그 레벨을 info로 설정합니다.

<logger name="log4jdbc" level="info" />: log4jdbc 라이브러리의 로그 레벨을 info로 설정합니다. 

이 라이브러리는 JDBC 쿼리 실행과 관련된 로그를 출력합니다.

다른 <logger> 요소들은 JDBC 관련 로그를 자세하게 제어합니다. 

예를 들어, jdbc.sqlonly는 쿼리문을 출력하고, jdbc.sqltiming은 쿼리문과 실행 시간을 출력합니다.

Root Logger 설정:
<root>: Root Logger의 설정입니다. Root Logger는 모든 로그에 대한 기본 설정을 나타냅니다. 

Root Logger의 로그 레벨은 warn으로 설정되어 있으며, 

콘솔과 RollingFileAppender에 로그를 출력하도록 설정되어 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 
  <!-- Appenders : 로그를 출력하는 Appender 모음 -->
  
  <!--
    %d{날짜시간패턴} : 로그기록시간 (SimpleDateFormat과 같은 날짜시간패턴)
    %level           : 로그 레벨 (OFF > ERROR > WARN > INFO > DEBUG > TRACE)
    %logger          : 로그를 찍는 클래스 (어떤 클래스가 동작할 때 로그가 남겨지는가?)
    %msg             : 로그 메시지
    %n               : 줄 바꿈
  -->
  
  <!-- Console에 로그를 찍는 Appender -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
    </encoder>
  </appender>
  
  <!-- File에 로그를 찍는 Appender -->
  <appender name="file" class="ch.qos.logback.core.FileAppender">
    <file>/log/app09_log.log</file>
    <append>true</append>
    <immediateFlush>true</immediateFlush>
    <encoder>
      <pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
    </encoder>
  </appender>
  
  <!-- 매일 새로운 로그 파일을 만드는 RollingFileAppender -->
  <appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>/log/app09.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <maxFileSize>100MB</maxFileSize>
      <maxHistory>30</maxHistory>
      <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
    </encoder>
  </appender>
  
  <!-- Application Loggers -->
  <logger name="com.gdu.app09" level="info" />
  
  <!-- 3rdparty Loggers -->
  <logger name="org.springframework" level="info" />
  <logger name="log4jdbc"            level="info" />
  <logger name="jdbc.sqlonly"        level="info" />  <!-- 쿼리문 출력하기 -->
  <logger name="jdbc.sqltiming"      level="off" />   <!-- 쿼리문 + 실행시간 출력하기 -->
  <logger name="jdbc.resultsettable" level="info" />  <!-- SELECT 결과를 테이블 형식으로 출력하기 -->
  <logger name="jdbc.connection"     level="off" />   <!-- Connection 연결/종료 정보 출력하기 -->
  <logger name="jdbc.audit"          level="off" />   <!-- ResultSet을 제외한 jdbc 호출 정보 출력하기 -->
  <logger name="jdbc.resultset"      level="off" />   <!-- ResultSet을 포함한 jdbc 호출 정보 출력하기 -->
  
  <!-- Root Logger -->
  <root>
    <priority value="warn" />
    <appender-ref ref="console" />
    <appender-ref ref="rolling" />
  </root>
  
</configuration>
cs

 

 

 

 

'코딩기록 저장소 🐕 > spring(JPA)🌱' 카테고리의 다른 글

Spring AOP  (0) 2023.10.11
Springjdbc  (0) 2023.10.11
jdbcJunitTest  (0) 2023.10.10
Spring ajax2  (0) 2023.10.06
Spring DI ajax  (0) 2023.10.05