본문 바로가기
JAVA/log

#1 log_기본

by 히포파타마스 2021. 7. 6.

log_기본

 

1. 로깅 라이브러리

스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 함께 포함된다.

 

스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다.

 

· SLF4J

· Logback

 

로그 라이브러리는 Logback, Log4J, Log4J2 등등 수많은 라이브러리가 있는데 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J라이브러리다.

 

즉, SLF4J는 인터페이스이고, 그 구현체가 Logback이다.

 

실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다.

 

2. log 사용 기본

로그는 아래와 같이 로그 인스턴스를 생성해 사용해야 하지만 롬북을 이용하면 이 과정을 생략하고 log 인스턴스를 편하게 사용할 수 있다.

 

private Logger log = LoggerFactory.getLogger(getClass());

 

위의 과정을 @Sl4j 애노테이션을 클래스에 붙이는 것으로 생략할 수 있다.

 

로그의 기본적인 사용은 아래 예제에서 확인할 수 있다.

 

 

[각 레벨별 출력]

@Slf4j
@RestController
public class LogTestController {

	@RequestMapping("/log-test")
	public String logTest() {
		String name = "Spring";
		
		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);
//로그를 사용하지 않아도 a+b 계산 로직이 먼저 실행됨, 이런 방식으로 사용하면 X
		log.debug("String concat log=" + name);
		return "ok";
	}
}

로그 레벨은 다음과 같은 관계를 따른다.

 

TRACE > DEBUG > INFO > WARN > ERROR

 

보통 개발 서버는 debug까지, 운영 서버는 info까지 출력한다.

 

로그는 log.레벨("문자열={}", 변수) 의 형식으로 사용한다. 변수는 {} 부분에 대체돼서 출력된다.

 

+연산을 사용해도 문자는 붙어서 출력된다. 하지만 로그 레벨에 의해 출력이 되지 않을 때도 +연산은 실행되기 때문에 경우에 따라 낭비가 심할 수 있다. 

 

따라서 log를 쓸 때는 +연산보다 {}, 변수의 형식을 쓰는 게 권장된다.

 

 

[로그 결과]

2021-07-06 17:41:42.055 DEBUG 14852 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  : debug log=Spring
2021-07-06 17:41:42.056  WARN 14852 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  : warn log=Spring
2021-07-06 17:41:42.056 ERROR 14852 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  : error log=Spring
2021-07-06 17:41:42.056  INFO 14852 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  :  info log=Spring

로그로 출력되는 포맷은 다음과 같다.

 

시간, 로그 레벨, 프로세스, ID, 쓰레드 명, 클래스 명, 로그 메시지

 

 

[로그 레벨 설정]

#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug

application.properties에서 위와 같이 로그 레벨을 설정할 수 있다.

 

전체 적용도 가능하고, 특정 패키지 별로 적용할 수도 있다.

 

 

3. 로그 사용 시 장점

로그 사용시 다음과 같은 장점이 있다.

 

· 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.

· 로그 레벨에 따라 로그 출력을 선택할 수 있다.

· 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다.

· System.out보다 성능이 좋다.

 

댓글