[백엔드] slf4j로 로그 남기기

2025. 10. 27. 13:05·CS/백엔드

한 명이 아니라 여러 사람들이 로그로그하는데 (줄여서 한로로)

나는 처음 백엔드 프로젝트를 할 때 로그를 만들지 않았다. 어차피 사용자도 거의 없어서 로그도 적고, 디버깅용도의 로그를 System.out.pritln으로 출력하면 되니까

 

그러나 로거를 사용해 로그를 남기면 원하는 위치에 로그파일을 남길 수 있고, System.out.println을 사용하면 표준출력으로 로그가 남는다는 것이 차이다. 그래서 로그를 어떻게 남기고, 어디에 남겨야할지 알아보기로 한다.

 

https://wildeveloperetrain.tistory.com/204

 

로깅시 System.out.println() 사용을 지양해야 하는 이유

Java 프로그래밍을 처음 접하게 되면 거의 대부분이 다음과 같이 "Hello World"를 콘솔에 출력하는 것에서부터 시작하게 됩니다. 이때 사용되는 출력 방법인 System.out.println() 메서드는 자바 표준 입력

wildeveloperetrain.tistory.com

좀 더 자세한 것은 이것을 보면 좋을듯하다.

 

나는 slf4j를 사용해보려한다.

물론 내가 직접 로그 파일을 만들고 저장해도 되긴한다.


slf4j는 스프링에 지원하는 로깅 라이브러리로, dependency에 아래의 문장을 추가해야한다.

implementation 'org.springframework.boot:spring-boot-starter-logging'

 

스프링에서 쓰이는 로그 라이브러리는 logback, log4j 등 여러 라이브러리가 있는데 그것들을 하나로 통합하여 제공되는 인터페이스가 slf4j이다.

 

비동기처리하면서 만든 예제에 적용시켜보자면..

https://dev-dx2d2y-log.tistory.com/108

 

[비동기-2편] 비동기처리로 클라이언트 풀어주기

더보기비동기 시리즈0편:스프링 초기세팅하기 - https://dev-dx2d2y-log.tistory.com/102 1편:javax.mail로 메일보내기 - https://dev-dx2d2y-log.tistory.com/1031.5편:내부클래스로 코드 간략화 - https://dev-dx2d2y-log.tistory.co

dev-dx2d2y-log.tistory.com

 

private final Logger log = LoggerFactory.getLogger(MailController.class);

인스턴스 변수로 Logger를 선언한 후에,

 

public String sendMail(@ModelAttribute MailContentDTO mailContentDTO, Model model) {
        mailFilter.sendMailFilter(mailContentDTO);

        log.info("To : {}", mailContentDTO.getEmailAddress());
        log.info("Title : {}", mailContentDTO.getTitle());
        log.info("content : {}", mailContentDTO.getContent());
        return "sending";
    }

Logger 객체를 이용해서 원하는 부분에서 로그를 출력하도록 할 수 있다.

또는 @Slf4j 어노테이션을 사용하면 Logger 객체가 log라는 변수명을 가진채로 미리 선언된다.

 

로그를 찍을 때는 저렇게 중괄호를 통해서 변수를 대입해야한다. 일반 println할 때처럼 + 연산자를 통해 변수의 값을 출력문에 대입하면 문자열 연산이 일어나 성능이 떨어진다.


로그에는 레벨이란 것이 있는데, 더 안전한 것에서 위험한 방향으로

trace - debug - info - warn - error 순으로 있다. 위에서 log.info를 찍은 것은 로그 레벨 중에서 info 레벨로 로그를 설정하여 내보내겠다는 뜻.

 

아무 설정을 하지 않았을 때는 info로 레벨이 설정되며, 더 낮은 레벨의 로그(trace 쪽으로 갈수록 더 낮은레벨이다)는 로그파일로 나가지 않는다. 즉, 아무 설정도 하지 않아서 info로 로그레벨이 지정되어 있을 때 debug 로그를 출력하려한다면 로그파일에는 적히지 않는다.

 

logging.level.root = info
logging.level.com.ums.h2sm = debug

기본 로그레벨을 바꾸고 싶다면 application.properties에서 다음과 같이 지정하면 된다. 윗줄이 가장 기본레벨, 아랫줄이 특정 패키지나 클래스에서만 예외적으로 다른 레벨을 지정하는 것이다.


이렇게 Logger 객체를 불러오고 나면 로그가 저장될 장소를 정하놔야하는데,

application.properties (또는 application.yml) 파일에서 지정할 수 있다.

logging.file.path = logs

이렇게 application.properties에서 logging.file.path를 통해서 로그파일이 저장될 경로(절대경로/상대경로 모두가능)를 입력할 수 있고, 상대경로로 입력할 경우에는 프로젝트 파일의 가장 밖에서부터 접근할 수 있다.

 

logging.file.name = logs/app.log

 또는 이렇게 logging.file.name을 통해서 로그파일을 지정해줄수도 있다.

 

 

두 개 다 쓰면 디렉토리에 지정된 파일이 없을 경우 새로 생성하고, 있을 경우 기존의 파일에서 이어쓰는 형식으로 로그가 작성된다.


이렇게 로그를 설정하고나서 직접 메일을 날려보면

 

2025-10-27T12:58:21.419+09:00  INFO 11724 --- [h2sm] [main] com.ums.h2sm.H2smApplication             : Starting H2smApplication using Java 17.0.16 with PID 11724 (C:\Users\dh200\Downloads\h2sm\h2sm\build\classes\java\main started by dh200 in C:\Users\dh200\Downloads\h2sm)
2025-10-27T12:58:21.421+09:00 DEBUG 11724 --- [h2sm] [main] com.ums.h2sm.H2smApplication             : Running with Spring Boot v3.5.6, Spring v6.2.11
2025-10-27T12:58:21.421+09:00  INFO 11724 --- [h2sm] [main] com.ums.h2sm.H2smApplication             : No active profile set, falling back to 1 default profile: "default"
2025-10-27T12:58:22.467+09:00  INFO 11724 --- [h2sm] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
2025-10-27T12:58:22.483+09:00  INFO 11724 --- [h2sm] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 14 ms. Found 0 JDBC repository interfaces.
2025-10-27T12:58:23.115+09:00  INFO 11724 --- [h2sm] [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2025-10-27T12:58:23.131+09:00  INFO 11724 --- [h2sm] [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2025-10-27T12:58:23.131+09:00  INFO 11724 --- [h2sm] [main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.46]
2025-10-27T12:58:23.226+09:00  INFO 11724 --- [h2sm] [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2025-10-27T12:58:23.226+09:00  INFO 11724 --- [h2sm] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1719 ms
2025-10-27T12:58:23.928+09:00  INFO 11724 --- [h2sm] [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2025-10-27T12:58:24.286+09:00  INFO 11724 --- [h2sm] [main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:~/test user=DDD
2025-10-27T12:58:24.289+09:00  INFO 11724 --- [h2sm] [main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2025-10-27T12:58:24.468+09:00  INFO 11724 --- [h2sm] [main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:~/test'
2025-10-27T12:58:24.573+09:00  INFO 11724 --- [h2sm] [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-10-27T12:58:24.585+09:00  INFO 11724 --- [h2sm] [main] com.ums.h2sm.H2smApplication             : Started H2smApplication in 3.928 seconds (process running for 5.247)
2025-10-27T12:58:30.904+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-10-27T12:58:30.905+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2025-10-27T12:58:30.906+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2025-10-27T12:58:30.964+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] com.ums.h2sm.Mail.MailController         : To : kdhyun422@gmail.com
2025-10-27T12:58:30.965+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] com.ums.h2sm.Mail.MailController         : Title : 메일 테스트
2025-10-27T12:58:30.966+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-1] com.ums.h2sm.Mail.MailController         : content : 메일테스트ㅁㄴㅇㄹ
2025-10-27T12:58:36.131+09:00  INFO 11724 --- [h2sm] [pool-2-thread-1] com.ums.h2sm.Mail.MailFilter             : 성공 | 소요시간 : 5161

스프링을 실행할 때 출력창에 찍히던 것이 로그파일에 찍히게 된다.

 

2025-10-27T13:00:34.686+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-8] com.ums.h2sm.Mail.MailController         : To : kdhyun422
2025-10-27T13:00:34.689+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-8] com.ums.h2sm.Mail.MailController         : Title : 메일 테스트
2025-10-27T13:00:34.690+09:00  INFO 11724 --- [h2sm] [http-nio-8080-exec-8] com.ums.h2sm.Mail.MailController         : content : 메일테스트ㅁㄴㅇㄹ
2025-10-27T13:00:38.307+09:00 ERROR 11724 --- [h2sm] [pool-3-thread-1] com.ums.h2sm.Mail.MailFilter             : Error : Invalid Addresses

에러가 터지면 이렇게 에러도 로그로 남는다.

출력창에서 빨간색으로 나타난 것에 비해선 임팩트가 적긴하지만... 암튼 성공

 

이것말고도 다른 여러 설정을 할 수도 있다.

서버가 꺼지면 새 파일을 만들다던가 용량은 100mb를 넘지 않게한다던가... 암튼 이런거는 다음에 다뤄보기로한다. 우선은 기본적인 로그출력방식과 로그에 대해서 알아봤다.

'CS > 백엔드' 카테고리의 다른 글

WebSocketConfig로 사전 세팅하기  (0) 2025.11.04
HttpSession을 통한 세션로그인 구현해보기  (0) 2025.11.03
[2025백엔드] 스프링인액션 독서 #7 - 4장. 스프링 시큐리티 2  (2) 2025.08.05
[2025백엔드] 스프링인액션 독서 #6 - 4장. 스프링 시큐리티 1  (4) 2025.08.04
[2025백엔드] 스프링인액션 독서 #5 - 3장. 데이터로 작업하기 #3  (2) 2025.08.04
'CS/백엔드' 카테고리의 다른 글
  • WebSocketConfig로 사전 세팅하기
  • HttpSession을 통한 세션로그인 구현해보기
  • [2025백엔드] 스프링인액션 독서 #7 - 4장. 스프링 시큐리티 2
  • [2025백엔드] 스프링인액션 독서 #6 - 4장. 스프링 시큐리티 1
Radiata
Radiata
개발을 합니다.
  • Radiata
    DDD
    Radiata
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (59)
        • JVM (12)
        • 백엔드 (20)
        • 언어구현 (1)
        • 객체지향 (1)
        • 논리회로 (5)
        • 컴퓨터구조 (9)
        • 데이터베이스 (1)
        • 컴퓨터 네트워크 (10)
      • 언어공부 (64)
        • Java | Kotlin (48)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • [2026] 순수자바로 개발하기 (0)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 놀이터 (0)
      • 에러 수정일지 (2)
      • 고찰 (24)
        • CEOS 23기 회고록 (2)
  • 블로그 메뉴

    • CS
    • 언어공부
    • 개인 프로젝트
    • 팀 프로젝트
    • 알고리즘
    • 고찰
    • 신년사
    • 컬러잇 개발블로그
  • 링크

    • 컬러잇 개발블로그
  • 공지사항

  • 인기 글

  • 태그

    144
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Radiata
[백엔드] slf4j로 로그 남기기
상단으로

티스토리툴바