로그 Log

Walter Mitty·2023년 2월 8일
0

Logging

  • 어플리케이션 개발 중 혹은 완료 후 발생할 수 있는 오류를 디버깅하거나 상태를 모니터링하기 위헤 필요한 정보를 기륵하는 것.

개발 중에 필요한 완료시에 필요한 로그를 구분하기 위해서 Sysout으로 개발 중에 내가 어떤 메시지가 필요한지 확인하고, 주석하고 풀고... -> 매번 컴파일/재컴파일 하게됨
개발상태, 완료상태를 알려주는 Sysout... 로깅처리하기 좋은 부분은 아니다


Java 주요 Logging framework

  • Log4j
  • Logback: Log4j의 후속버전으로 더 많이 쓰임 - SpringBoot에 포함되어있다
  • tinylog: 최소형 로그처리 (소형 애플리케이션에 맞음 예) 모바일, 스마트카드...)
  • SLF4J(Simple Loggnig Facade For Java)
    • 자바 주요 로깅 프레임워크의 표준안
    • 파사드(facade) 패턴: 쓰기 쉽게, 단순하게 바꿔주는 것.

      - logback, log4j, jul = slf4j의 구현체이다.


      로깅처리를 하기 위해서는 SLF4J와 연결된 slf4j-log4j12.jar 라이브러리가 필요하다.
      slf4j-log4j12.jar 가 사용하려고하는 로깅 프레임워크가 log4j일때 slf4j api의 사용법을 보면서 사용하게 된다. 왜냐하면 slf4j api가 표준안이기 때문에.
      각각의 실제 프레임워크의 사용법으로 직접사용하면 사용법이 서로 조금씩 달라서 프레임워크 기능이 꼬일 수 있다.

      - 따라서 이걸봐도 logback을 쓰려면 logback-classic-{}.jar같은 바인딩을 위한 라이브러리와 logback-core같은 와 slf4j-api사용법이 들어있어야한다.

      - 실제 기술은 logback이지만 slf4j 문법을 쓰면 알아서 호출되므로 저걸로 선택

  • 로그 레벨
    • TRACE < DEBUG < INFO < WARN < ERROR 로 나누어진다.

      TRACE 레벨 : 상세정보를 나타낸다. (너무 상세해서 안씀)
      DEBUG 레벨 : 디버깅하기위해 표시한다.
      INFO 레벨 : 상태의 변경정보를 표시한다.
      WARN 레벨 : 경고성 메시지를 표시한다.
      ERROR 레벨 : 오류발생한 경우를 표시한다.


  • 스프링 부트의 기본 log 레벨이 INFO 이기 때문에 그 하위 log들은 안뜬다.
    • INFO 보다 높은 애들은 다 뜬다.
      • application.properties에서 log 레벨을 설정할 수 있다.
  • 패키지 단위로도 레벨 설정이 가능하다
    • 셀렉트 구문 결과가 drivethru에 의해서 표처럼 보여줬는데 그거 싫어! 하면
      (customer에 관련된 sql 구문 로그들을 레벨 warn으로 설정하면 표같은게 나타나지않는다.)
    • 오호 jdbc.resultsettable 때문에 이렇게 보이는구나
    • 더이상 로그인했을 때 표처럼 보이지 않고, sql 문이 나온다.

개발할 때 필요한 로그 / 배포할 때 필요한 로그

개발용 application-dev.properties

  • logging.level.root=info
    배포용 application.properties
  • logging.level.root=warn

개발환경
① application.properties 파일위치
conf > src/config > src/main/resources
conf에 저장하는 application.properties의 우선순위가 가장 높아서 먼저 실행된다.

  • 따라서 여기저기 properties파일이 있을 때는 우선순위가 높은 곳에 있는 properties 부터 시작되므로 잘 정해야한다.

② 개발환경(dev, qa...)별 파일이름은 프로필별로 구분한다.

  • application.properties
  • application-dev.properties (-dev: dev 프로필 -> 보통 개발중인 환경)
  • application-qa.properties (-qa: qa 프로필 -> 보통 테스트중인 환경)

③ 프로필 설정

  • application.properties 파일의 spring.profiles.active=프로필이름
    ex) spring.profiles.active=dev -> application-dev.properties이 실행
  • spring.profiles.active=dev을 설정해주면
  • 주석을 처리해주면 다시 원래 설정해놓은 warn 레벨부터 나온다.
    • 따라서 개발환경일 때, 테스트 환경일 때 적절하게 바꿔가면서 사용한다.

배포후에는
로그를 콘솔로 보는게 아니라, 파일로 관리해야한다.
logging.file.path=로 로그파일이 저장될 경로 설정


  • info로 하면 log가 확늘어나면서 파일사이즈를 넘겨버림
    • 파일사이즈를 넘어가면 알아서 0번 idx부터 파일이 만들어진다.

  • 로그메시지를 커스텀하고 싶다면
    logging.pattern.console=
    예) %5level -> 5는 다섯자리라는 뜻, %msg%n -> msg+개행
  • 패키지를 표시하거나 할 수도 있음

설정파일을 스프링부트가 지원해주는걸 쓰거나 새로 만들어 써도 된다.
default을 안쓰고 콘솔에 보여줄 때의 패턴, 파일의 보관주기 등 설정 가능

로그를

  • 제일 많이활용하는건 JUnit 단위테스트때!

    스프링에서는 이렇게 해줬지만,
    스프링부트에서는 @SpringBootTest만 선언해주면되고,
    locations 대신

@Transactional 을 붙이고 JUnit을 해보면

  • setAutoCommit(false)가 되어있는것을 볼 수 있다.

    위에서 부터 console 내용을 읽어보면

    더 내려보면

    DB에도 제목XXX, 내용XXX 안들어가있는거 확인가능!

controller는 mocker를 이용해서 단위테스트하는게 까다롭기때문에 포스트맨 추천!!!

0개의 댓글