이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Spring Basic] 로그

  • 2022.08.16 21:24
  • Spring/Spring
반응형

 

 

 

스프링은 SLF4J (Simple Logging Facade for Java) 를 인터페이스로 여러 가지 로그 라이브러리들을 제공한다.

스프링이 기본적으로 제공하는 Logback 로그 프레임워크에 대해 살펴보자.

 

 

@RestController
public class LogTestController {
    private final Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";

        System.out.println("name = " + name);

        // 우선 순위 오름차순.
        log.trace("trace log={}", name);
        log.debug("debug log={}", name);
        log.info(" info log={}", name);
        log.warn(" warn log={}", name);
        log.error("error log={}", name);

        return "check";
    }
}

 

 

로그 레벨은 TRACE > DEBUG > INFO > WARN > ERROR 순서이다. (ERROR가 우선순위가 가장 높음)

 

 

logging.level.hello.springmvc = trace

 

 

애플리케이션 프로퍼티를 통해 로그에 관련된 설정을 조작할 수 있다. (info가 기본값)

 

개발 서버에서는 로그를 debug로 설정해 debug 이하의 로그를 모두 출력하고

운영 서버에서는 info로 설정해 info 이하의 로그를 모두 출력하는 방식을 사용한다.

(운영 서버에서는 중요한 로그만 남겨야 한다)

 

 

@Slf4j
@RestController
public class LogTestController {
//    private final Logger log = LoggerFactory.getLogger(getClass());

    @RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";

        System.out.println("name = " + name);

        // 우선 순위 내림차순.
        log.trace("trace log={}", name);
        log.debug("debug log={}", name);
        log.info(" info log={}", name);
        log.warn(" warn log={}", name);
        log.error("error log={}", name);

        return "check";
    }
}

 

@Slf4j 애너테이션을 사용하면 로거 객체를 만들지 않아도 된다.

 

항상 하던대로 + 로 문자열을 concat해서 출력해도 되지만, + 를 사용하면 일단 문자열을 접합하는 연산이 수행된다.

출력하지도 않을 로그에 대해 연산을 수행해 CPU를 사용해 리소스를 낭비하는건 합리적이지 않다.

 

{} 를 사용하면 출력하지 않을 로그에 대해서는 연산을 수행하지 않아 리소스를 절약할 수 있다.

 

System.out.println( ) 메서드도 콘솔에 로그를 출력할 수 있지만, 그럼에도 로그 프레임워크를 사용해서 로그를 출력하는 이유는 다음과 같다.

 

1. 로그 레벨

앞서 살펴봤듯 로그 프레임워크는 로그 레벨을 설정해 로그의 중요성에 따라 다르게 처리할 수 있다.

(println 메서드로 작성하는 로그는 중요도가 모두 동일하게 취급된다)

 

2. 출력 대상

로그 프레임워크는 콘솔 말고도 파일, 데이터베이스 등에도 로그를 출력할 수 있다.

 

3. 성능

System.out.println( ); 메서드는 동기화된 메서드이기에 여러 쓰레드에서 출력 시도 시 쓰레드가 대기 상태에 걸릴 수 있다.

로그 프레임워크를 사용하면 비동기로 로그를 출력할 수 있어 성능을 향상시킬 수 있다.

 

 

 

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Spring > Spring' 카테고리의 다른 글

[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조  (1) 2023.06.14
[Spring Basic] 예외처리  (0) 2023.06.13
[Spring Basic] 빈의 생명주기와 스코프  (0) 2022.08.09
[Spring Basic] 의존관계 주입  (0) 2022.08.08
[Spring Basic] Singleton  (1) 2022.08.07

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조

    [Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조

    2023.06.14
  • [Spring Basic] 예외처리

    [Spring Basic] 예외처리

    2023.06.13
  • [Spring Basic] 빈의 생명주기와 스코프

    [Spring Basic] 빈의 생명주기와 스코프

    2022.08.09
  • [Spring Basic] 의존관계 주입

    [Spring Basic] 의존관계 주입

    2022.08.08
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (706)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (162)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Data Science (10)
      • Embedded Software (10)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (12)
    • 💬 기록 (12)
    • 📚 공부 (7)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / AXZ. Copyright © i3months.

티스토리툴바