-
Notifications
You must be signed in to change notification settings - Fork 0
[LOG] 로그 세팅
springboot 에서 기본적으로 설정되어 있는 로깅 프레임워크이다.
서버에서 nohup 으로 실행을 했을 때, console 로 출력되는 로그를 확인할 수 없던 점
그래서 해결 방안으로 배포 스크립트에 >> application.log 2> /dev/null &
를 추가했습니다.
하지만, warn 또는 error 로그를 따로 확인을 하고 싶어서 logback 설정을 하게 되었습니다.
먼저 xml 설정을 하기 위해선, logback-spring.xml 을 생성해야 합니다.
아래는 펀잇팀 logback-spring.xml 설정입니다.
![펀잇팀 logback-spring.xml](https://private-user-images.githubusercontent.com/91244090/261935247-80d6dfc9-2764-4acd-8f6c-f121dedc39b9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDk5ODQsIm5iZiI6MTczOTAwOTY4NCwicGF0aCI6Ii85MTI0NDA5MC8yNjE5MzUyNDctODBkNmRmYzktMjc2NC00YWNkLThmNmMtZjEyMWRlZGMzOWI5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZjODIxYjZiYmI4NWI5ZjFhNmFmYTJiMTljM2Q0Y2ExYjQ0ZTI3OGI5OWE1MjQyNTAwOGIwODMwYWZjMGFlNGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.O6UrINfYhdSzfin2DigEpDGgC0hGhlFvQwc9-nLaN-s)
첫번째와 두번째 박스를 보면, defaults.xml 과 console-appender.xml 를 include 해주는 모습입니다.
- spring boot 에서 지정한 기본 설정을 포함한다는 의미입니다.
세번째 박스 logback-spring-${spring.profiles.active}.xml
입니다.
- 서버가 실행될 때 어떤 profile 로 실행되는지 변수를 받아와서 해당 환경에 맞는 로그 설정을 읽겠다는 의미입니다.
logback-spring-dev.xml 이 파일을 보겠습니다.
중요한 두가지 설정이 있습니다.
-
appender
- 로그가 출력되는 위치
-
logger
- 로그 메세지를 appender 에 전달
- console appender
- file appender
- rollingFile appender
- smtp appender
- db appender
등등 여러 appender 가 있습니다. 저희는 rollingfile appender 를 설정했습니다.
그 이유는 console 로 확인을 할 수 없었고, 그냥 file appender 는 한 파일이 너무 커지기 때문에 고려하지 않았습니다.
다음 smtp 나 db 는 해당 작업 리소스가 크다고 예상하고 적용하지 않았습니다.
Rolling appender 를 사용하면 특정 크기나 시간에 도달하면 새로운 파일로 교체됩니다.
![error appender](https://private-user-images.githubusercontent.com/91244090/261943983-e4439638-dca0-44b4-b2aa-66a55c26b83c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDk5ODQsIm5iZiI6MTczOTAwOTY4NCwicGF0aCI6Ii85MTI0NDA5MC8yNjE5NDM5ODMtZTQ0Mzk2MzgtZGNhMC00NGI0LWIyYWEtNjZhNTVjMjZiODNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDEwMTQ0NFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTNlMGJkNTBmZTU4ZmU3N2Q2NTE5YzQxYTJjOWY0OGVlNjY1MmI1NDdhODg1MzY4MjViM2RlMzkzNzMwMGZlYzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.reS06S3yxy7NEb8F-DOETiEhu0n04IV89Q3OMAx5sdY)
위 그림을 보면서 알아보겠습니다.
-
LevelFilter
- 로그 레벨에 따라 로그 메시지를 필터링합니다.
-
<level>
어떤 레벨의 로그를 수락하는지 결정합니다. -
<onMatch>ACCEPT</onMatch>
위 level 과 일치하는 로그 메시지를 허용합니다. -
<onMismatch>DENY</onMismatch>
위 level 과 일치하지 않는 로그는 전부 다 걸러냅니다.
-
로그가 기록될 기본 파일의 경로를 정의합니다.
-
SizeAndTimeBasedRollingPolicy
- 롤링 정책 중 하나로 파일 크기와 시간 두가지 설정을 가지고 파일을 결정합니다.
-
<fileNamePattern>~~~/%d{yyyy-MM-dd}_%i.log</fileNamePattern>
같은 시간 파일이 생성되게 되면 %i 로 0,1,2.. 순으로 숫자가 올라가면서 파일이 생성됩니다. -
<maxFileSize></maxFileSize>
로그 파일이 해당 크기에 도달하게 되면 새로운 파일로 교체됩니다. -
<maxHistory></maxHistory>
로그 파일이 해당 기간을 넘기게 되면 자동 삭제됩니다.
-
encoder
- 로그 메시지의 형태를 결정합니다.
-
outputPatternAsHeader
는 로그가 시작될 때 맨 위에 어떤 패턴인지 명시해줍니다.
서버의 리소스를 얼마나 잡아 먹는지, 로그는 얼마나 찍히는 지 확인해야 하지만 아직은 감으로 설정한 상태입니다.
특정 기간을 잡고 서버의 상태를 확인해가며 적절한 SizeAndTimeBasedRollingPolicy 설정을 해야합니다!
- 📚 프론트엔드 개발 문서
- 🌏 브라우저 지원 범위
- 🧪 프론트엔드 테스트 전략
- [웹 접근성] a tag와 button의 차이는 무엇일까?
- multipart
- SvgSprite 컴포넌트 사용하기
- [INFRA] 프론트엔드 CI/CD 구축
- [기술 검토] 리액트 쿼리 도입 이유
- [기술] 로그인 기능 도입기
- 🐛 S3 배포 캐싱 오류
- 이미지를 위한 S3와 Cloudfront 설정하기
- 📓 성능리포트 ‐ 펀잇 서비스 최적화하기
- 펀잇 SEO 개선하기
- 📚 백엔드 개발 문서
- intellij에서 private DB 연결하기
- [INFRA 0] 전체 infra 구조 - ver1
- [INFRA 1] infra 서버 세팅
- [INFRA 2] 백엔드 CI/CD 구축
- [INFRA 3] 백엔드 DB 연결
- [INFRA 4] 깃허브 PR 라벨을 기준으로 젠킨스 빌드하기
- [LOG] 로그 세팅
- [Trouble Shooting] 일관된 테스트 격리 적용하기
- [Trouble Shooting] 프록시로 동작하는 @Transactional, 전파 옵션 관리