โ๏ธ ์คํ๋ง ๋ก๊ทธ
์คํ๋ง์์๋ ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์ application.properties ์ logback-spring.xml ํ์ผ์ ์ฌ์ฉํ๋ค. ์ ์์ ๊ฒฝ์ฐ ๋ก๊ทธ ๋ ๋ฒจ ์ค์ ๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ค์ ๋ฐ์ ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ํน์ ๋น์ฆ๋์ค ๋ก์ง๋ณ, ์ผ์๋ณ๊ณผ ๊ฐ์ด ์์ธํ ์ค์ ์ ์ํด์๋ logback-spring.xml์ ์ฌ์ฉํด์ผ ํ๋ค.
Logback
Logback์ log4j๋ฅผ ๋ฐ์ ์ํจ Logging Framework๋ก Spring Boot๋ spring-boot-starter-web -> spring-boot-starter-logging์ logback ๊ตฌํ์ฒด๊ฐ ํฌํจ๋์ด ์๋ค.
๊ทธ๋์ ์์กด์ฑ์ ๋ฐ๋ก ์ถ๊ฐํ์ง ์์๋ logback์ด ๊ธฐ๋ณธ ๋ก๊น ๊ตฌํ์ฒด๋ก ์๋ ์ ์ฉ๋๋ค.
์ด๋ ๊ฒ ์ ์ฉ๋ ๋ก๊น ๊ตฌํ์ฒด๋ SLF4J(Simple Logging Framework for JAVA : interface)์ compile์์ ๋ฐ์ธ๋ฉ๋๋ค.
Log Level
๋ก๊ทธ ๋ ๋ฒจ์ 5๊ฐ์ง๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์๋ก ๋จ๊ณ๊ฐ ๋์์ง๋ค.
Trace โก Debug โก Info โก Warn โก Error
โ๏ธ ๋ฆฌ๋ ์ค ์๋ฒ ๋ก๊ทธ ๊ด๋ฆฌ
๋จผ์ ๋ก๊ทธ ๊ด๋ฆฌ์ ๊ธฐ๋ณธ์ธ ๋กํ ์ด์ ์ด๋ผ๋ ์ฉ์ด๋ถํฐ ์ ๋ฆฌํด๋ณด์
๋กํ ์ด์
- ๋ก๊ทธ ๋กํ ์ด์ ์ ๊ฒฝ์ฐ, ์์คํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฑ๋๋ ๋ก๊ทธ ํ์ผ์ด ์ผ์ ํฌ๊ธฐ์ ๋๋ฌํ๊ฑฐ๋ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋ก์ด ๋ก๊ทธ ํ์ผ์ ์์ฑํ๊ณ ์ค๋๋ ๋ก๊ทธ ํ์ผ์ ์์ถ, ์์นด์ด๋น, ๋๋ ์ญ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๋งํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ก๊ทธ ํ์ผ์ด ์ผ์ฃผ์ผ๋ง๋ค ๋กํ ์ด์ ์ด ์ค์ ๋์ด ์๋ค๋ฉด, ๋งค์ฃผ ์๋ก์ด ๋ก๊ทธ ํ์ผ์ด ์์ฑ๋๊ณ ์ด์ ์ฃผ์ ๋ก๊ทธ ํ์ผ์ ์์นด์ด๋น๋๊ฑฐ๋ ์ญ์ ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ก๊ทธ ํ์ผ์ด ๋ฌดํ์ ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ๋์คํฌ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ํ์ฉํ๋ฉฐ, ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
ํ์ฌ ๋์ EC2 ์๋ฒ๋ **Nginx, Docker(WAS:Tomcat)**์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Nginx
/etc/nginx/nginx.conf
- ๋ก๊ทธ ํ์ผ์ ์ ์ฅ ๊ฒฝ๋ก์ ๋ก๊ทธ ์ถ๋ ฅ ํ์์ ์ง์ ํ ์ ์๋ค.
- ๋ก๊ทธ ์ถ๋ ฅ ํ์
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
`Default192.0.2.1 - john [10/Jul/2023:14:02:39 +0900] "GET /index.html HTTP/1.1" 200 555 "<http://example.com/>" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"`
-
- $remote_addr: ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค.
- $remote_user: ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ด๋ฆ์ ๋ํ๋ธ๋ค.
- $time_local: ๋ก์ปฌ ์๊ฐ์ ๋ํ๋ ๋๋ค. ์ด๋ ์ ์ ์๊ฐ์ ๋ํ๋ธ๋ค.
- $request: ํด๋ผ์ด์ธํธ์ ์๋ ์์ฒญ ๋ฌธ์์ด์ ๋ํ๋ธ๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ URL ๋ฐ HTTP ๋ฉ์๋(GET, POST ๋ฑ)์ ๋ํ๋ธ๋ค.
- $status: ์์ฒญ์ ๋ํ ์๋ต์ HTTP ์ํ ์ฝ๋๋ฅผ ๋ํ๋ธ๋ค.
- $body_bytes_sent: ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ๋ํ๋ธ๋ค.
- $http_referer: ํด๋ผ์ด์ธํธ HTTP ํค๋์ Referer ํ๋๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํด๋น ์์ฒญ์ ํ๊ธฐ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ ์นํ์ด์ง์ URL์ ๋ํ๋ธ๋ค.
- $http_user_agent: ํด๋ผ์ด์ธํธ HTTP ํค๋์ User-Agent ํ๋๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ , ์ด์ ์ฒด์ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ํ๋ธ๋ค.
- $http_x_forwarded_for: ํด๋ผ์ด์ธํธ HTTP ํค๋์ X-Forwarded-For ํ๋๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ ํ๋ก์๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ์๋ฒ์ ๋๋ฌํ ์์ฒญ์ ๊ฒฝ์ฐ, ์๋ ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค.
/etc/logroate.conf
- Linux ์์คํ ์์ ๋ก๊ทธ ํ์ผ ๋กํ ์ด์ (์๋ ๋ก๊ทธ ๊ด๋ฆฌ)์ ์ ์ดํ๋ ์ค์ ํ์ผ์ด๋ค. ์ด ํ์ผ์ ์ค์ ์ ๋ฐ๋ผ, ๋ก๊ทธ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ผ์ ํฌ๊ธฐ์ ๋๋ฌํ๊ฑฐ๋ ์ผ์ ์๊ฐ์ด ๊ฒฝ๊ณผํ๋ฉด ์๋ก์ด ๋ก๊ทธ ํ์ผ์ ์์ฑํ๊ณ , ์ค๋๋ ๋ก๊ทธ ํ์ผ์ ์ญ์ ํ๊ฑฐ๋ ์์ถํ๋ ์์ ์ ์ํํ๋ค.
- /etc/logrotate.conf ์ค์ ํ์ผ์๋ ์ ์ญ ์ค์ ์ ํฌํจํ๊ณ , /etc/logrotate.d/ ๋๋ ํ ๋ฆฌ์๋ ๊ฐ๋ณ ์๋น์ค(์: apache, nginx ๋ฑ)์ ๋ํ ๋ก๊ทธ ๋กํ ์ด์ ์ค์ ํ์ผ์ด ์์นํด ์๋ค.
- /etc/logroate.conf/nginx
- Default ๊ฐ/var/log/nginx/*.log { ... }: ์ด ์ค์ ์ด ์ ์ฉ๋ ๋ก๊ทธ ํ์ผ์ ์ง์ ํฉ๋๋ค./var/log/nginx/ ๋๋ ํ ๋ฆฌ ๋ด์ ๋ชจ๋ .log ํ์ผ์ ์ด ์ค์ ์ด ์ ์ฉ๋ฉ๋๋ค.daily: ๋ก๊ทธ ํ์ผ์ ๋งค์ผ ๋กํ ์ด์ ํฉ๋๋ค.missingok: ๋ก๊ทธ ํ์ผ์ด ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฌด์ํ๊ณ ๋์ด๊ฐ๋๋ค.compress: ๋กํ ์ด์ ๋ ๋ก๊ทธ ํ์ผ์ gzip์ผ๋ก ์์ถํฉ๋๋ค.sharedscripts: ๋ก๊ทธ ํ์ผ ๋ชจ๋์ ๋ํด postrotate์ endscript ์ฌ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ํ ๋ฒ๋ง ์คํํฉ๋๋ค.
- postrotate ... endscript: ๋ก๊ทธ ํ์ผ์ ๋กํ ์ด์ ํ ํ์ ์คํํ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ Nginx์ USR1 ์๊ทธ๋์ ๋ณด๋ด ๋ก๊ทธ ํ์ผ์ ์ฌ์คํํ๋ผ๋ ๋ช ๋ น์ ๋ด๋ฆฝ๋๋ค. ์ด๋ Nginx๊ฐ ํ์ฌ ๋ก๊ทธ ํ์ผ์ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ฉฐ, ์๋ก์ด ๋ก๊ทธ ํ์ผ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋๋ก ํฉ๋๋ค.
- delaycompress: ๋กํ ์ด์ ๋ ์ด์ ๋ก๊ทธ ํ์ผ์ ์์ถ์ ์ง์ฐํฉ๋๋ค. ์ด๋ compress ์ต์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ๋ ์ ์ฉํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ๋ก๊ทธ ํ์ผ์ ์ฐ๋ ์ค์ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ๋ฐฉ์งํด์ค๋๋ค.
- notifempty: ๋ก๊ทธ ํ์ผ์ด ๋น์ด์๋ ๊ฒฝ์ฐ ๋กํ ์ด์ ํ์ง ์์ต๋๋ค.
- rotate 10: ๋ก๊ทธ ํ์ผ์ ์ต๋ 10๊ฐ๊น์ง ์ ์งํฉ๋๋ค. 10๊ฐ๊ฐ ๋์ผ๋ฉด ๊ฐ์ฅ ์ค๋๋ ๋ก๊ทธ ํ์ผ๋ถํฐ ์ญ์ ๋ฉ๋๋ค.
- create 0640 nginx root: ๋ก๊ทธ ํ์ผ์ ๋กํ ์ด์ ํ ํ ์ ๋ก๊ทธ ํ์ผ์ ์์ฑํฉ๋๋ค. ์์ฑ๋ ํ์ผ์ ๊ถํ์ 0640์ด๋ฉฐ, ์์ ์๋ 'nginx', ๊ทธ๋ฃน์ 'root'์ ๋๋ค.
- /var/log/nginx/*.log { create 0640 nginx root daily rotate 10 missingok notifempty compress delaycompress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }
Logrotate
logrotate๋ ์ผ๋ฐ์ ์ผ๋ก cron์ด๋ผ๋ ๋ฆฌ๋ ์ค์ ์์ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
๋ฆฌ๋ ์ค ๋ฐฐํฌํ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก /etc/cron.daily ๋๋ /etc/cron.weekly ๋ฑ์ ๋๋ ํ ๋ฆฌ์ logrotate๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํํ๋ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์์คํ ์ด ๋ถํ ๋ ๋ cron์ ์ํด ์๋์ผ๋ก ์ค์ผ์ค๋ง๋๋ค.
- logrotate -f์ ๊ฐ์ ๋ช ๋ น์ ๋ก๊ทธ ํ์ผ์ ๋กํ ์ด์ ์ ์ฆ์ ๊ฐ์ ๋ก ์คํํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋๋ฒ๊น ์ด๋ ํ ์คํธ, ๋๋ ๋์คํฌ ๊ณต๊ฐ์ ์ฆ์ ํ๋ณดํด์ผ ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.