log4j2 setting

log4j 2014. 11. 3. 19:44
728x90
반응형

회사에서 유지보수하는 프로젝트가 db에 쿼리를 날릴때마다? 이클립스 console 에 

1
2
3
4
5
6
7
8
9
10
11
12
2014-09-17 19:33:14,266 DEBUG [java.sql.Connection] {conn-100000} Connection
2014-09-17 19:33:14,266 DEBUG [java.sql.Connection] {conn-100000} Connection
2014-09-17 19:33:14,276 DEBUG [java.sql.Connection] {conn-100000} Preparing Statement:    SELECT *   FROM (    SELECT     a.menu_id     , a.umenu_id     , (select menu_nm from tc_menu_new where menu_id = a.umenu_id) as umenu_nm     , a.menu_level     , a.menu_nm     , a.page_url     , a.page_link     , a.seq_no     , a.use_yn     , a.authmenu_yn     , a.info_gb     , SUBSTR (SYS_CONNECT_BY_PATH (A.MENU_ID, ' '), 2, 6) AS tmenu_id                 , substr(sys_connect_by_path(a.menu_nm, ' > '), 4) as fullpath                 , connect_by_isleaf as isleaf    FROM     tc_menu_new a    WHERE 1=1        START WITH a.umenu_id is null       CONNECT BY PRIOR a.menu_id = a.umenu_id        ) M    where 1=1        AND     M.page_url = ?     and M.menu_level in ('1','2')                  
2014-09-17 19:33:14,276 DEBUG [java.sql.Connection] {conn-100000} Preparing Statement:    SELECT *   FROM (    SELECT     a.menu_id     , a.umenu_id     , (select menu_nm from tc_menu_new where menu_id = a.umenu_id) as umenu_nm     , a.menu_level     , a.menu_nm     , a.page_url     , a.page_link     , a.seq_no     , a.use_yn     , a.authmenu_yn     , a.info_gb     , SUBSTR (SYS_CONNECT_BY_PATH (A.MENU_ID, ' '), 2, 6) AS tmenu_id                 , substr(sys_connect_by_path(a.menu_nm, ' > '), 4) as fullpath                 , connect_by_isleaf as isleaf    FROM     tc_menu_new a    WHERE 1=1        START WITH a.umenu_id is null       CONNECT BY PRIOR a.menu_id = a.umenu_id        ) M    where 1=1        AND     M.page_url = ?     and M.menu_level in ('1','2')                  
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Executing Statement:    SELECT *   FROM (    SELECT     a.menu_id     , a.umenu_id     , (select menu_nm from tc_menu_new where menu_id = a.umenu_id) as umenu_nm     , a.menu_level     , a.menu_nm     , a.page_url     , a.page_link     , a.seq_no     , a.use_yn     , a.authmenu_yn     , a.info_gb     , SUBSTR (SYS_CONNECT_BY_PATH (A.MENU_ID, ' '), 2, 6) AS tmenu_id                 , substr(sys_connect_by_path(a.menu_nm, ' > '), 4) as fullpath                 , connect_by_isleaf as isleaf    FROM     tc_menu_new a    WHERE 1=1        START WITH a.umenu_id is null       CONNECT BY PRIOR a.menu_id = a.umenu_id        ) M    where 1=1        AND     M.page_url = ?     and M.menu_level in ('1','2')                  
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Executing Statement:    SELECT *   FROM (    SELECT     a.menu_id     , a.umenu_id     , (select menu_nm from tc_menu_new where menu_id = a.umenu_id) as umenu_nm     , a.menu_level     , a.menu_nm     , a.page_url     , a.page_link     , a.seq_no     , a.use_yn     , a.authmenu_yn     , a.info_gb     , SUBSTR (SYS_CONNECT_BY_PATH (A.MENU_ID, ' '), 2, 6) AS tmenu_id                 , substr(sys_connect_by_path(a.menu_nm, ' > '), 4) as fullpath                 , connect_by_isleaf as isleaf    FROM     tc_menu_new a    WHERE 1=1        START WITH a.umenu_id is null       CONNECT BY PRIOR a.menu_id = a.umenu_id        ) M    where 1=1        AND     M.page_url = ?     and M.menu_level in ('1','2')                  
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Parameters: [/login.do]
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Parameters: [/login.do]
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Types: [java.lang.String]
2014-09-17 19:33:14,472 DEBUG [java.sql.PreparedStatement] {pstm-100001} Types: [java.lang.String]
2014-09-17 19:33:14,515 DEBUG [java.sql.ResultSet] {rset-100002} ResultSet
2014-09-17 19:33:14,515 DEBUG [java.sql.ResultSet] {rset-100002} ResultSet

위와 같은 로그를 출력해 주었다. (해당 sql 을 소스에서 찾지 않고 콘솔에 있는것을 내용들을 사용할수 있어서 편햇다.)

그래서 위와 같은 설정을 개인 프로젝트에 적용해 보기로 하였다. 이유는 sql error 발생시 맨 마지막에 출력된 sql 로그를 복사해서 db 관리 툴에 바로 붙혀넣기하고 테스트 할수 있어 편했기 때문이다. 

한번 적용해보았던 것이라 금방 끝날줄 알았는데 꾀 오래 걸렸다.  (6시간 이상) 

한번 설정하고 나면 이후에는 변경하는 일이 거의 없을거라 생각하여 공부를 깊게 하지 않았고, 개인적으로 호스팅 받고 있는 cafe24 tomcat server 가 계속 로그를 쌓다가 멈출까봐 그렇게 하였었다

log4j 는 log4j.xml 을 이용해서 설정하는 경우와 log4j.properties 를 이용해서 설정하는 방법이다.

그러나 log4j2 는 log4j2.xml 을 이용해서 설정하여야 한다. ( log4j.properties 를 사용하는 방법은 지원하지 않는다)

일단 pom.xml 에 관련 라이브러리를 추가하고 src/main/resources 내에 log4j2.xml 만 위치 시키면 된다.

egov 3.0 이상 프로젝트는 따로 라이브러리 설정 없이 log4j2 를 사용할수 있는 듯 하다.

나중에 알았는데 xml 내부에 logger 설정을 안해주어서 그런거엿다.... 

처음에는 lof4j 라이브러리 버전 호환 문제, 제대로 xml 을 못찾아서 로그가 안나오는줄 알았다... 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %5p [%c] %m%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="egovframework" level="DEBUG" additivity="true">
            <AppenderRef ref="console" />
        </Logger>
        <!-- log SQL with timing information, post execution -->
        <logger name="jdbc.sqltiming" level="INFO" additivity="true">
            <appender-ref ref="console" />
        </logger>
        <logger name="org.springframework" level="INFO" additivity="true">
            <appender-ref ref="console" />
        </logger>
        <logger name="java.sql.Connection" level="DEBUG" additivity="false">
            <appender-ref ref="console" />
        </logger>
        <logger name="java.sql.Statement" level="DEBUG" additivity="false">
            <appender-ref ref="console" />
        </logger>
        <logger name="java.sql.PreparedStatement" level="DEBUG" additivity="false">
            <appender-ref ref="console" />
        </logger>
        <logger name="java.sql.ResultSet" level="DEBUG" additivity="false">
            <appender-ref ref="console" />
        </logger>
        <Root level="ERROR">
            <AppenderRef ref="console" />
        </Root>
    </Loggers>
</Configuration>


아래 링크는 egov 에서 log4j2.xml 에 적용에 관해 설명한 문서이다 

http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:%EC%84%A4%EC%A0%95_%ED%8C%8C%EC%9D%BC%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94_%EB%B0%A9%EB%B2%95

728x90
반응형

'log4j' 카테고리의 다른 글

log4j2  (0) 2014.10.27
log4j properties로 설정 방법  (0) 2014.02.28
[log4j] Conversion Pattern  (0) 2014.01.06
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,