안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
PSA (Portable Service Abstraction)
* 스프링은 다른 여러 모듈을 사용함에 있어서 별도의 추상화 레이어 제공
* 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중가능.
Slf4jTest
@Slf4j
public class Slf4jTest {
//private static final Logger log = LoggerFactory.getLogger(Slf4jTest.class);
public static void main(String[] args) {
// log.fatal("fatal"); // log4j에 있는 fatal 레벨이 slf4j에는 존재하지 않음!
log.error("error");
log.warn("warn");
log.info("info");
log.debug("debug");
log.trace("trace");
}
}
@콘솔출력값
ERROR: com.ce.spring2.slf4j.Slf4jTest - error
WARN : com.ce.spring2.slf4j.Slf4jTest - warn
INFO : com.ce.spring2.slf4j.Slf4jTest - info
DEBUG: com.ce.spring2.slf4j.Slf4jTest - debug
Log4j에 있는 fatal 레벨은 Slf4j에는 존재하지 않습니다.
log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<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.ce.spring2">
<level value="debug" />
</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="warn" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
com.ce.spring2의 level이 debug로 설정되어있기 때문에 trace은 출력되지 않은 것을 확인할 수 있습니다.
<root>는 해당하지 않는 로그를 Root Logger에 설정합니다.
※ slf4j 관련 포스팅
https://hello-bryan.tistory.com/331
파일로 출력
서버 더블클릭 - Open launch configuration - Arguments - Dcatalina.base 경로 복사 - 파일탐색기에서 붙여넣기
이곳에 로그들을 (hello-spring.log.2022-08-23) 파일로 모아 관리하려고 합니다.
appender
<appender name="fileLogger" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${catalina.base}/logs/hello-spring/hello-spring.log" />
<param name="append" value="true" />
<param name="dataPattern" value=".yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p:[%d{yyyy-MM-dd HH:mm:ss}]%F:%L - %m%n">
</layout>
</appender>
${catalina.base} → 서버에서 복사한 경로와 동일
Root Logger
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
<appender-ref ref="fileLogger" />
</root>
로그들을 남긴 후 파일 경로 확인
hello-spring 폴더가 생긴 것을 확인할 수 있습니다.
hello-spring 폴더
log들을 담은 파일이 생성된 것을 확인할 수 있습니다.
hello-spring.log
INFO :[2022-08-23 13:54:47]ContextLoader.java:271 - Root WebApplicationContext: initialization started
INFO :[2022-08-23 13:54:48]ContextLoader.java:307 - Root WebApplicationContext initialized in 1641 ms
INFO :[2022-08-23 13:54:48]FrameworkServlet.java:525 - Initializing Servlet 'appServlet'
INFO :[2022-08-23 13:54:49]FrameworkServlet.java:547 - Completed initialization in 908 ms
DEBUG:[2022-08-23 13:54:49]DemoController.java:100 - @ModelAttribute - common 호출!
DEBUG:[2022-08-23 13:54:50]BaseJdbcLogger.java:159 - ==> Preparing: select * from dev order by no
DEBUG:[2022-08-23 13:54:51]BaseJdbcLogger.java:159 - ==> Parameters:
DEBUG:[2022-08-23 13:54:51]BaseJdbcLogger.java:159 - <== Total: 3
INFO :[2022-08-23 13:54:51]DemoController.java:174 - list = [Dev(no=1, name=박채똥, career=1, email=chaeDdong@gmail.com, gender=M, lang=[Java, Python], createdAt=2022-08-18T12:39:15), Dev(no=4, name=신사동, career=2, email=aaa@abc.com, gender=M, lang=[Python], createdAt=2022-08-18T12:41:18), Dev(no=5, name=유재석, career=1, email=aaa@abc.com, gender=M, lang=[Javascript], createdAt=2022-08-18T12:43:50)]
DEBUG:[2022-08-23 13:54:56]BaseJdbcLogger.java:159 - ==> Preparing: select * from member where member_id = ?
DEBUG:[2022-08-23 13:54:56]BaseJdbcLogger.java:159 - ==> Parameters: honggd(String)
DEBUG:[2022-08-23 13:54:56]BaseJdbcLogger.java:159 - <== Total: 1
INFO :[2022-08-23 13:54:56]HomeController.java:27 - Welcome home! The client locale is ko_KR.
DEBUG:[2022-08-23 13:55:00]DemoController.java:100 - @ModelAttribute - common 호출!
DEBUG:[2022-08-23 13:55:00]BaseJdbcLogger.java:159 - ==> Preparing: select * from dev order by no
DEBUG:[2022-08-23 13:55:00]BaseJdbcLogger.java:159 - ==> Parameters:
DEBUG:[2022-08-23 13:55:00]BaseJdbcLogger.java:159 - <== Total: 3
INFO :[2022-08-23 13:55:00]DemoController.java:174 - list = [Dev(no=1, name=박채똥, career=1, email=chaeDdong@gmail.com, gender=M, lang=[Java, Python], createdAt=2022-08-18T12:39:15), Dev(no=4, name=신사동, career=2, email=aaa@abc.com, gender=M, lang=[Python], createdAt=2022-08-18T12:41:18), Dev(no=5, name=유재석, career=1, email=aaa@abc.com, gender=M, lang=[Javascript], createdAt=2022-08-18T12:43:50)]
DEBUG:[2022-08-23 13:55:01]DemoController.java:100 - @ModelAttribute - common 호출!
DEBUG:[2022-08-23 13:55:01]BaseJdbcLogger.java:159 - ==> Preparing: select * from dev where no = ?
DEBUG:[2022-08-23 13:55:01]BaseJdbcLogger.java:159 - ==> Parameters: 4(Integer)
DEBUG:[2022-08-23 13:55:01]BaseJdbcLogger.java:159 - <== Total: 1
DEBUG:[2022-08-23 13:55:03]DemoController.java:100 - @ModelAttribute - common 호출!
DEBUG:[2022-08-23 13:55:03]BaseJdbcLogger.java:159 - ==> Preparing: update dev set name = ?, career = ?, email = ?, gender = ?, lang = ? where no = ?
DEBUG:[2022-08-23 13:55:03]BaseJdbcLogger.java:159 - ==> Parameters: 신사(String), 2(Integer), aaa@abc.com(String), M(String), Python(String), 4(Integer)
DEBUG:[2022-08-23 13:55:03]BaseJdbcLogger.java:159 - <== Updates: 1
DEBUG:[2022-08-23 13:55:04]DemoController.java:100 - @ModelAttribute - common 호출!
DEBUG:[2022-08-23 13:55:04]BaseJdbcLogger.java:159 - ==> Preparing: select * from dev order by no
DEBUG:[2022-08-23 13:55:04]BaseJdbcLogger.java:159 - ==> Parameters:
DEBUG:[2022-08-23 13:55:04]BaseJdbcLogger.java:159 - <== Total: 3
INFO :[2022-08-23 13:55:04]DemoController.java:174 - list = [Dev(no=1, name=박채똥, career=1, email=chaeDdong@gmail.com, gender=M, lang=[Java, Python], createdAt=2022-08-18T12:39:15), Dev(no=4, name=신사, career=2, email=aaa@abc.com, gender=M, lang=[Python], createdAt=2022-08-18T12:41:18), Dev(no=5, name=유재석, career=1, email=aaa@abc.com, gender=M, lang=[Javascript], createdAt=2022-08-18T12:43:50)]
이처럼 로그들이 해당 파일에 모아진 것을 확인할 수 있습니다.
※ 설정한 파일 패턴은 추후 확인 가능!
'Java > Spring' 카테고리의 다른 글
Spring) 할일 목록 조회하기(두 조건 상이하게 정렬하기), 할일 추가하기 (0) | 2022.08.24 |
---|---|
Spring) Interceptor - LogInterceptor, LoginInterceptor (0) | 2022.08.24 |
Spring) 회원 정보 수정 (0) | 2022.08.23 |
Spring) Model (ModelAndView, ModelMap, Model), @ModelAttribute, @SessionAttribute, @SessionAttributes (1) | 2022.08.23 |
Spring) 로그인 / 로그아웃 처리 (Model 세션 저장, 만료 처리) (0) | 2022.08.22 |