Setting

log4j 설정

  • -
반응형

이번 포스팅은 프로그램을 사용하면서 로그를 남기고 싶은 분들을 위한 글입니다.

참고로 현재 사용중인 이클립스는 Oxygen 버전이며 log4j는 1.2 버전을 사용했습니다.


log4j

log4j란 프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 자바 기반 로깅 유틸리티입니다. 디버그용 도구로 주로 사용되며, log4j의 최근 버전에 의하면 높은 등급에서 낮은 등급으로의 6개 로그 레벨을 가지고 있습니다. 

 

로그란 프로그램을 사용한 기록을 남기는 것입니다.

그럼 log4j를 적용해보겠습니다.

 

1.log4j 다운로드

1-1) 사이트(http://logging.apache.org/log4j/1.2/)에 접속하면 아래와 같은 화면이 보입니다. 왼쪽 Download 클릭

 

1-2) 다음 화면에서 log4j-1.2.17.zip 클릭

 

1-3) 아래 url 클릭 후 원하는 경로에 다운받습니다.

 

 

1-4) 자신이 다운받은 경로에서 zip 파일을 압축풀면 아래와 같은 파일들을 확인할 수 있습니다.

우리에게 필요한 파일은 jar 파일입니다.

 

2.Project - Properties - Java Build Path - Libraries - Add External JARs... 

다운 받은 경로를 찾아가 log4j-1.2.17.jar 파일을 추가합니다.

 

3.프로젝트의 WebContent - WEB_INF - lib 폴더에도 추가합니다.

여기까지가 다운받은 log4j를 프로젝트에 적용하는 부분입니다.

 

 

4.로그 기록 파일 생성

프로젝트에서 src 경로에 log파일을 생성 및 설정하는 파일을 만듭니다. ☞ log4j.properties

 

5.로그 보관 폴더 생성

생성된 폴더의 경로는 4) 에서 만든 log4j.properties에서 사용됩니다.

 

6.로그 옵션 설정

아래 내용을 log4j.properties에 입력합니다.

 

log4j.properties

# Root logger option

# Log4j Setting file
log4j.rootLogger=DEBUG, console, R

# Daily file log
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\ws_study/shXorld/logs/web.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n

# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n
log4j.appender.console.ImmediateFlush=true
  • log4j.rootLogger=DEBUG, console, R
    • - DEBUG : 로그 레벨을 의미하며 DEBUG로 설정한 메시지를 출력시키겠다는 의미입니다. 로그 레벨은 [TRACE < DEBUG < INFO < WARN < ERROR < FATAL] 로 오른쪽으로 갈 수록 높은 레벨입니다. (예를 들어, WARN으로 설정한 경우 WARN 레벨 이상의 경우(WARN, ERROR, FATAL)만 출력됩니다)
    • console, R : appender의 이름을 뜻하며, console이라는 이름과 R이라는 이름을 사용하겠다는 의미입니다.
  • appender : 로깅 메시지를 파일에 기록할 것인지 콘솔창에 출력할 것인지 구분하기 위한 매개
  • log4j.appender.R=org.apache.log4j.DailyRollingFileAppender : R이라는 appender는 파일에 기록하겠다는 의미입니다.
  • log4j.appender.R.File=D:\\ws_study/shXorld/logs/web.log : 로그를 남길 파일명과 경로를 지정합니다.
  • log4j.appender.R.DatePattern='.'yyyy-MM-dd : 로그 파일명의 포맷으로 하루가 지나면 로그 파일의 백업 파일을 생성하는데 이 때 파일명 뒤에 날짜가 붙습니다. ex) web.log.2019-01-09
  • log4j.appender.R.layout=org.apache.log4j.PatternLayout : layout에는 HTMLLayout, PatternLayout, XMLLayout, SimpleLayout 등이 있는데 PatternLayout은 다양한 로그 메세지 조합을 만들 수 있습니다.
  • log4j.appender.R.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n : 로그의 출력 레이아웃을 설정합니다.
    • - %d{HH:mm:ss} : %d는 로깅 이벤트가 발생한 시간을 뜻하며 {HH:mm:ss}가 뒤에 붙으면 시:분:초 형태로 기록이 됩니다.
    • - %-5p : 좌측 정렬로 로그 레벨을 기록합니다.
    • - %F : 로그가 발생한 파일명
    • - %L : 로그가 발생한 라인번호
    • - %m : 로그의 내용
    • - %n : Enter 처리
  • log4j.appender.console=org.apache.log4j.ConsoleAppender : console이라는 appender는 콘솔창에 출력하겠다는 의미입니다.
  • log4j.appender.console.layout=org.apache.log4j.PatternLayout : 위와 동일
  • log4j.appender.console.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n : 위와 동일
  • log4j.appender.console.ImmediateFlush=true : 로그 메세지의 버퍼 유무로 기본값은 true입니다.

 

7.로그 남기기

현재 개인 사이트로 개발중인 페이지에 적용을 시켜봤습니다. 저는 특정 메소드에서 실행되는 쿼리를 Debug하고 싶었습니다.

로그를 남기기 위한 방법은 간단합니다.

CommonVO에는 공통으로 사용하는 클래스를 따로 분리해두었는데 이 곳에 Logger 인스턴스를 생성하고 GuestDAO.java에서 CommonVO를 상속받아 사용하게 했습니다.

*org.apche.log4j.Logger를 import해야 합니다.

package web.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.log4j.Logger;

public class CommonVO {
    protected Connection con = null;
    protected PreparedStatement pstmt = null;
    protected ResultSet rs = null;
    protected StringBuffer sql = null;
    
    protected DBConnect dbConnect = null;
    protected DBDisconnect dbDisconnect = null;
    
    protected Logger log = Logger.getRootLogger();
    
    public String getQueryString(String pstmt) {
        String query = pstmt;
        int index =  pstmt.indexOf(":");
        
        query = query.substring(index+1);        
        
        return query;
    }
}
 

log.debug를 사용해서 문자열로 된 쿼리를 디버그해볼 수 있습니다.

getQueryString 함수는 pstmt.toString을 했을 때 "com.mysql.jdbc.JDBC42PreparedStatement@....." 문자열이 조합되어 나오기 때문에 해당 문자열을 잘라주기 위해 만들었습니다.

 

package web.guest;

import java.net.InetAddress;
import java.util.ArrayList;

import web.common.*;

public class GuestDAO extends CommonVO {

    public GuestDAO() {
        dbConnect = new DBConnect();
        dbDisconnect = new DBDisconnect();
    }
    
    public GuestVO read(int g_no) {
        GuestVO guestVO = new GuestVO();
        
        try {
            con = dbConnect.getConnection();
            sql = new StringBuffer();            
            sql.append("\n SELECT g_no, g_show, g_name, g_content, g_password, g_ymd, g_img, g_ip ");
            sql.append("\n FROM guest ");
            sql.append("\n WHERE g_no = ? ");            
            
            pstmt = con.prepareStatement(sql.toString());    
            pstmt.setInt(1, g_no);    
            log.debug(getQueryString(pstmt.toString()));
                                
            rs= pstmt.executeQuery();
            
            if(rs.next() == true) {
                guestVO.setG_no(rs.getInt("g_no"));
                guestVO.setG_show(rs.getString("g_show"));
                guestVO.setG_name(rs.getString("g_name"));
                guestVO.setG_content(rs.getString("g_content"));
                guestVO.setG_password(rs.getString("g_password"));
                guestVO.setG_ymd(rs.getString("g_ymd"));
                guestVO.setG_img(rs.getString("g_img"));
                guestVO.setG_ip(rs.getString("g_ip"));
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            dbDisconnect.disconnect(con, pstmt, rs);
        }
        return guestVO;
    }
}

Logger 인스턴스를 생성해서 디버그하고 싶은 부분을 log.debug로 잡아주면 로그를 남길 수 있습니다.

 

8.로그 확인

설정 후 콘솔에 출력된 로그 내용입니다.

 

 

로그 파일이 있는 폴더(6)에서 설정했었던 로그 파일 경로)에 가보면 로그 파일이 쌓인 것을 확인할 수 있고, 로그 내용을 보면 정상적으로 로그가 입력되어있는 것을 확인할 수 있습니다.

 

 

web.log

 

반응형

'Setting' 카테고리의 다른 글

MariaDB 설치(10.2)  (0) 2019.02.08
DBCP 설정(MySQL)  (0) 2019.01.18
CKEditor 사용법  (18) 2018.12.07
[Git]Windows 환경의 Git 설치  (7) 2018.11.08
[Tomcat]이클립스 톰캣 연동  (0) 2018.10.09
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.