백그라운드에서 Spring Boot를 실행시켜보면 포그라운드와 달리 실시간으로 로그가 찍히지 않는다.
그럼 Spring Boot가 뱉어내는 로그를 확인하고 싶을 때는 어떻게 해야 할까?
nohup이라는 명령어로 프로그램을 실행시키면 nohup.out이라는 파일에 로그가 쌓이게끔 작동한다. nohup 명령어를 입력한 뒤에 찍히는 출력값을 자세히 읽어보면 아래와 같이 작성되어 있다.
… appending output to ‘nohup.out’
프로세스에서 발생한 출력값을 nohup.out이라는 파일에 추가해서 저장하겠다는 의미이다. 실제로 그런지 확인해보자.
nohup.out 파일 확인해보기
확실한 테스트를 위해 기존에 실행시키던 Spring Boot 서버를 종료하고 기존 nohup.out 파일을 삭제한 뒤에 확인해보자.
# Spring Boot 프로세스 종료하기
$ ps aux | grep java
$ kill [PID 값]
# 기존 nohup.out 파일 삭제
$ ls
$ rm -rf nohup.out
$ ls # 잘 삭제됐는 지 확인
# 백그라운드에서 Spring Boot 실행시키기
$ nohup java -jar linux-springboot-0.0.1-SNAPSHOT.jar &
$ ls # nohup.out 파일 생성됐는 지 확인하기
$ cat nohup.out # 파일 확인해보기
nohup.out 파일을 확인해보면 백그라운드에서 실행된 프로세스의 로그가 파일에 잘 기록된 걸 확인할 수 있다.
그럼 nohup.out 파일 말고 다른 파일에 로그를 남기고 싶은 경우에는 어떻게 해야 할까? 우리가 배운 내용을 활용해서 명령어를 작성해보자.
✅ nohup.out 파일이 아닌 다른 파일에 로그가 남도록 만들기
$ rm -rf nohup.out # 확실한 테스트를 위해 기존 nohup.out 파일 삭제
$ nohup java -jar linux-springboot-0.0.1-SNAPSHOT.jar >> result.log 2>&1 &
$ ls
$ cat result.log
Spring Boot 프로세스에서 발생한 로그(표준 출력과 표준 에러 출력)를 result.log 파일로 전달하게 만드는 명령어이다. 그리고 > 대신에 >>을 쓴 이유는 파일을 매번 새로 덮어쓰는 게 아닌, 기존 파일에 이어서 로그를 쌓아가게끔 만들고 싶어서이다.
result.log 파일을 확인해보면 정상적으로 로그가 저장된 걸 확인할 수 있다. 이전 강의에서 배웠던 표준 출력과 표준 에러 출력의 리다이렉션 기능을 활용해 프로세스에서 발생하는 출력값(로그)을 파일로 저장하게끔 해봤다.
여기서 로그를 잘 살펴보면 이번에는 Port 8080 was already in use라는 에러 메시지가 로그로 남아있다. 다음 강의에서 왜 이런 에러 메시지가 떴는 지 알아보자.