자바를 하게되면 콘솔에 데이터를 출력하기 위해 System.out.println()을 사용합니다. 하지만 스프링에서는 이를 사용할 필요없이 log4j라는 라이브러리가 로그 관련한 기능들을 관리해줍니다.
이 글은 STS(Spring toos Suite)로 생성한 스프링 프로젝트 기준으로 작성되었습니다. STS를 이용하여 프로젝트를 생성하는 방법은 가장 하단에 관련 글을 포스트합니다.
이 글은 자바웹을 다루는 기술 책을 참고하여 작성하였습니다.
log4j란?
스프링으로 개발할때 보면 콘솔에 위와 같은 엄청 많은 로그들이 출력되는데 이 모든게 log4j 덕분입니다. 개발할 당시에 사용했던 로그 메시지들은 실제로 서비스할 때 전혀 필요없게 됩니다. 그럴 경우 일일이 찾아서 해당 로그들을 삭제해주어야 하는데 이는 번거롭기 짝이 없습니다. 이럴때 필요한 것이 log4j입니다.
log4j.xml을 이루는 태그
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.myspring.pro27">
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger>
<!-- Root Logger -->
<root>
<priority value="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
태그 | 설명 |
<appender> | 로그의 출력 위치(파일, 콘솔, DB등)를 결정합니다. |
<layout> | appender가 어디에 출력할 것인지에 대한 태그였다면 layout은 어떤 형식으로 로그를 출력할지 정해줍니다. |
<logger> | 로깅 메시지를 appender에 전달합니다. logger는 6단계의 레벨을 가지며, 레벨을 가지고 출력여부를 결정합니다. |
# appender가 가지는 여러가지 클래스
appender 클래스 | 설명 |
ConsoleAppender | org.apache.log4j.ConsoleAppender 클래스로, 콘솔에 로그 메시지를 출력합니다. |
FileAppender | org.apache.log4j.FileAppender 클래스로, 파일에 로그 메시지를 출력합니다. |
RollingFileAppender | org.apache.log4j.rolling.RollingFileAppender 클래스로, 파일 크기가 일정 기준을 넘으면 기존 파일을 백업 파일로 바꾸로 처음부터 로그를 기록합니다. |
DailyRollingAppender | org.apache.log4j.rolling.DailyRollingFileAppender 클래스로, 설정한 기간 단위로 새 파일을 만들어 로그 메시지를 기록합니다. |
# PatternLayout 클래스에서 사용되는 속성들
속성 | 설명 |
%p | debug, info 등 로그 레벨 이름 출력 |
%m | 로그 메시지 출력 |
%d | 로깅 이벤트 발생 시각 출력 (yyyy-MM-dd HH:mm:ss) |
%c | 로깅 메시지 앞에 전체 패키지 이름이나 전체 파일 이름 출력 |
이외에도 더 많이 있으니 직접 찾아보시기 바랍니다.
http://logging.apache.org/log4j/1.2/manual.html
# log4j의 여러 가지 로그 레벨
레벨 | 설명 |
FATAL(6레벨) | 시스템 차원에서 심각한 문제가 발생했을 때의 레벨입니다. |
ERROR | 실행 중 문제가 발생한 상태를 나타냅니다. |
WARN | 시스템 오류의 원인이 될 수 있는 메시지를 나타냅니다. |
INFO | 로그인, 상태 변경과 같은 실제 애플리케이션 운영과 관련된 정보를 출력합니다. |
DEBUG | 개발 시 디버깅 용도로 사용한 메시지를 나타냅니다. |
TRACE(1단계) | DEBUG보다 상세한 로깅 정보를 출력합니다. |
가장 낮은 TRACE를 시작해 FATAL 레벨까지 있습니다. 지정한 레벨보다 낮은 레벨의 메시지들은 출력되지 않지만, 그보다 높은 레벨의 메시지들은 출력됩니다.
만약 INFO로 설정했다면 DEBUG와 TRACE 관련 메시지는 출력되지 않지만, 그보다 높은 나머지 3레벨은 INFO와 같이 출력됩니다.
예시
@Controller("memberController")
public class MemberControllerImpl implements MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberControllerImpl.class);
@Autowired
private MemberService memberService;
@Autowired
private MemberVO memberVO ;
@Override
@RequestMapping(value="/member/listMembers.do" ,method = RequestMethod.GET)
public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception {
String viewName = getViewName(request);
logger.info("viewName: "+ viewName);
logger.debug("viewName: "+ viewName);
List membersList = memberService.listMembers();
ModelAndView mav = new ModelAndView("home");
mav.addObject("membersList", membersList);
return mav;
}
만약 log4j.xml에서 logger가 info로 되어있다면 logger.debug 관련 로그는 출력되지 않습니다.
logger의 레벨은 debug로 낮추었더니 debug 또한 출력이 되었습니다.
마이바티스 SQL문을 로그로 출력하기
<!-- Root Logger -->
<root>
<priority value="debug" />
<appender-ref ref="console" />
</root>
log4j.xml에서 root logger의 속성값을 debug로 해주면 sql 또한 출력이 됩니다.
이상 log4j.xml에 대해 알아보았습니다.
'...' 카테고리의 다른 글
[Spring] 스프링에서 환경 변수 사용하기 (0) | 2021.01.14 |
---|---|
[Spring] 스프링 servlet-context로 jsp 경로 설정하기 (0) | 2021.01.14 |
[Js] window.open 함수로 팝업창 열기 (0) | 2021.01.14 |
List cannot be resolved to a type 에러 (0) | 2021.01.12 |
Tomcat 8 / 요청 타겟에서 유효하지 않은 문자가 발견되었습니다. tomcat rfc 7230 rfc 3986 오류 (0) | 2021.01.12 |