log4j2 설정
사내 프로젝트의 여러가지 설정, 프로퍼티들은 dev, test, master로 분리되어있는데 살펴보다보니 log4j2-test.xml이 없고 test 프로파일로 빌드 시 log4j2-dev.xml을 바라보고 있었다.
시간도 좀 여유가 있던 시점이라 그냥 내가 만들어서 분리시켰는데 하는김에 SQL 관련 로그 설정을 변경했고 공부도 할겸 내용을 정리했다.
1 | <!-- SQL Logger --> |
키 | 내용 |
---|---|
jdbc.connection | 열려있는 모든 번호와 연결 수립 및 해제 이벤트를 기록. 이는 연결 문제를 찾아내는데 매우 유용 (Connection Pool 설정) |
jdbc.audit | ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. |
jdbc.resultset | ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. |
jdbc.sqlonly | SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. (원래는 ? 로 표시되는데, log4j 덕분에 완전한 쿼리로 보여지는 것임) |
jdbc.resultsettable | SQL 결과 조회된 데이터의 table을 로그로 남긴다. |
jdbc.sqltiming | SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. |
SQL관련
sqlonly와 sqltiming은 sql로그를 찍는 공통적인 기능을 하며 sqltiming이 sqlonly를 포함하고 있습니다.
#{id} 등 파라미터로 넣어준 값도 모두 치환하여 출력해줍니다.
둘다 찍도록 하면 sql문이 두번 찍히니 하나만 찍어줍니다.
- jdbc.sqlonly : SQL문을 로그로 남깁니다.
- jdbc.sqltiming : SQL문과 수행된 시간을 로그로 남깁니다.
TABLE관련
결과를 table형식으로 만들어 출력해줍니다.
- jdbc.resultsettable : SQL 결과 조회된 데이터를 table 형식으로 만들어줍니다.
JDBC호출 관련
아래 두개의 설정은 일반적으로는 킬 필요가 없는 설정입니다.
두개가 묶음으로 JDBC 호출정보를 출력해주는 기능을 하며 ResultSet을 포함하느냐 포함하지 않느냐의 차이입니다.
- jdbc.audit : ResultSet을 제외한 JDBC 호출 정보를 로그로 남긴다.
- jdbc.resultset : ResultSet을 포함한JDBC 호출 정보를 로그로 남깁니다.
additivity : 중복된 로그를 남길 지 여부를 설정한다.
기본적으로 logger는 정의한 패키지의 조상으로부터 모든 appender를 상속받아서 만약 어떤 Logger가 같은 appender를 사용한다면 메시지가 2번 찍히게 된다.
additivity=”false” 설정하면 이를 방지할 수 있다.
Log Level
로그 레벨은 다음과 같다. (OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL)
레벨 | 범위 |
---|---|
OFF | 이벤트를 기록하지 않음 |
FATAL | 아주 심각한 에러가 발생한 상태를 나타냄. 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능할 경우가 해당하는데, 일반적으로는 어플리케이션에서는 사용할 일이 없음. |
ERROR | 요청을 처리하는중 문제가 발생한 상태를 나타냄. |
WARN | 처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄. |
INFO | 로그인, 상태변경과 같은 정보성 메시지를 나타냄. |
DEBUG | 개발시 디버그 용도로 사용한 메시지를 나타냄. |
TRACE | 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀더 상세한 상태를 나타냄. |
ALL | 모든 이벤트를 기록함 |