로그 사용 시 장점
쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
성능도 System.out
보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 로그를 사용한다.
log4j(Log for Java)란 이전 버전인 Log4j 1.x에 비해 크게 개선된 Log4j로의 업그레이드이며 Logback 아키텍처의 몇 가지 고유한 문제를 수정하면서 Logback에서 사용할 수 있는 많은 개선 사항을 제공하는 대표적인 자바 로깅 프레임워크이다. og4j 2.13.0 이상에는 Java 8이 필요합니다. 버전 2.4~2.12.1에는 Java 7이 필요합니다(Log4j 팀은 더 이상 Java 7을 지원하지 않습니다). 일부 기능에는 선택적 종속성이 필요합니다. 이러한 기능에 대한 설명서는 필요한 종속성을 지정합니다.
Log4j2를 사용하기 위해서는 아래와 같이 2단계로 프로젝트에 추가할 수 있습니다.
- 스프링 부트의 Default 자바 로깅 프레임워크는
logback
이다. 아래와 같이 build.gradle안에 dependencies에는org.springframework.boot:spring-boot-starter-web
에는 logback이 기본적으로 구현되어있다.implementation 'org.springframework.boot:spring-boot-starter-web'
기존 자바 로깅 프레임워크인 logback의 종속성을 제거해야합니다.
configurations { all { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } }
- Log4j2 프레임워크의 종속성을 추가해준다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j2' }
Log4j2 설정 파일
/src/main/resources 경로에 log4j2.xml 파일을 만들어 아래와 같이 기본적인 설정을 해준다.
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <!-- 해당 설정파일에서 사용하는 프로퍼티--> <Properties> <property name="LOGS_PATH">D:\test_logs</property> </Properties> <Appenders> <!-- 콘솔 --> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] %-5level %logger{35} - %msg%n" /> </Console> <!-- 파일 --> <RollingFile name ="RollingFile"> <FileName>${LOGS_PATH}/log4j2.log</FileName> <FilePattern>${LOGS_PATH}/log4j2.%d{yyyy-MM-dd}.%i.log.gz</FilePattern> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss} %5p [%c] %m%n</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="100MB"/> <TimeBasedTriggeringPolicy interval = "1" modulate = "true"/> </Policies> </RollingFile> </Appenders> <Loggers> <!-- Application Loggers --> <!-- Root 보다 우선 순위가 높습니다. --> <logger name="com.test.api.controller" level="INFO" additivity="false"> <AppenderRef ref="console" /> <AppenderRef ref="RollingFile" /> </logger> <logger name="com.test.api.service" level="INFO" additivity="false"> <AppenderRef ref="console" /> <AppenderRef ref="RollingFile" /> </logger> <!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE --> <Root level="INFO"> <AppenderRef ref="console" /> <AppenderRef ref="RollingFile" /> </Root> </Loggers> </Configuration>
<Property/>
: xml파일에서 사용할 공용 속성 값을 정의한다.<Appender/>
: StringBuilder에서 사용되는 append와 비슷한 개념이다, 실제로 로그를 작성하는 객체를 정의한다고 생각하면 된다.<Logger/>
: Appender가 작성한 대상들을 명시해준다.