관리 메뉴

거니의 velog

230922_Log4J 본문

대덕인재개발원_자바기반 애플리케이션

230922_Log4J

Unlimited00 2023. 9. 22. 13:35

[log4j.properties]

# Root logger option

# 1. 로그 출력 Level은 INFO부터 할것임.
# 2. rootLogger 에 사용할 로깅 Appender로 stdout이라는것과 
#    logfile이라는 것 두가지를 사용하겠다
log4j.rootLogger=debug, stdout, logfile

# Direct log messages to stdout
# ConversionPattern은 로그가 어떠한 형식으로 출력될것인지 
# 그 포맷을 정의하는 것.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %F-(%C{2}:%L) - %m%n

# Direct log message to log file
# logfile이라는 appender는 로그를 파일로 출력해주는 놈인데, 
# 파일path를 정의 할 수 있다.
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=D:/application.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{2} - %M:%L) - %m%n
log4j.appender.logfile.Append=true

[Log4jTest.java]

package kr.or.ddit.basic;

import org.apache.log4j.Logger;

public class Log4jTest {
	
	// Logger 클래스의 인스턴스를 받아온다.
	static Logger logger = Logger.getLogger(Log4jTest.class);
	
	public static void main(String[] args) {
		
		// 로그 기록 남기기
		// 형식) Logger객체.로그레벨이름("출력할 메시지")
		// 예) logger.trace("메시지")
		logger.trace("이것은 Log4j의 [TRACE]레벨의 출력입니다...");
		logger.debug("이것은 Log4j의 [DEBUG]레벨의 출력입니다...");
		logger.info("이것은 Log4j의 [INFO]레벨의 출력입니다...");
		logger.warn("이것은 Log4j의 [WARN]레벨의 출력입니다...");
		logger.error("이것은 Log4j의 [ERROR]레벨의 출력입니다...");
		logger.fatal("이것은 Log4j의 [FATAL]레벨의 출력입니다...");
		
	}

}


[DBUtil3.java]

package kr.or.ddit.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

// JDBC드라이버를 로딩하고 
// Connection객체를 생성해서 반환하는 메서드로 구성된 class

//(dbinfo.properties 파일의 내용을 이용하여 설정하기)
//==> ResourceBundle 객체 이용하기

public class DBUtil3 {
	
	static final Logger logger = Logger.getLogger(DBUtil3.class);
	
	static ResourceBundle bundle; // ResourceBundle객체 변수 선언
	
	static {
		
		// 객체 생성
		bundle = ResourceBundle.getBundle("kr.or.ddit.jdbc.config.dbinfo");
		logger.info("ResourceBundle객체 생성 - dbinfo.properties파일 이용");
		
		try {
//			Class.forName("oracle.jdbc.driver.OracleDriver");
			Class.forName(bundle.getString("driver"));
			logger.debug("DB 드라이버 로딩 성공~~");
			
		} catch (ClassNotFoundException e) {
//			System.out.println("드라이버 로딩 실패~~~");
			logger.error("드라이버 로딩 실패~~~", e);
			e.printStackTrace();
		}
		
	}
	
	public static Connection getConnection() {
		
		Connection conn = null;
		
//		String url = "jdbc:oracle:thin:@localhost:1521:xe";
//		String user = "pc_09";
//		String password = "java";
		
		String url = bundle.getString("url");
		String user = bundle.getString("user");
		String password = bundle.getString("password");
		
		try {
			conn = DriverManager.getConnection(url, user, password);
			logger.debug("DB 연결 성공!!!");
		} catch (SQLException e) {
//			System.out.println("DB 연결 실패~~~");
			logger.error("DB 연결 실패~~~", e);
			e.printStackTrace();
		}
		return conn;
		
	}

}

[MemberController 실행...]


[MemberDaoImpl.java]

package kr.or.ddit.member.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import kr.or.ddit.util.DBUtil3;
import kr.or.ddit.vo.MemberVO;

public class MemberDaoImpl implements IMemberDao {
	
	private static final Logger logger = Logger.getLogger(MemberDaoImpl.class);
	
	// 1번
	private static MemberDaoImpl dao;
	
	// 2번
	private MemberDaoImpl() {}
	
	// 3번
	public static MemberDaoImpl getInstance() {
		if(dao == null) dao = new MemberDaoImpl();
		return dao;
	}

	@Override
	public int insertMember(MemberVO memVo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr) ";
			sql += " values(?, ?, ?, ?, ?) ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_id());
			pstmt.setString(2, memVo.getMem_pass());
			pstmt.setString(3, memVo.getMem_name());
			pstmt.setString(4, memVo.getMem_tel());
			pstmt.setString(5, memVo.getMem_addr());
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용 데이터 [" + memVo.getMem_id() + ", " + memVo.getMem_pass() + ", " + memVo.getMem_name() + ", " + memVo.getMem_tel() + ", " + memVo.getMem_addr() + "]");
			
			cnt = pstmt.executeUpdate();
			logger.info("실행 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("실행 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}
    
  ......

[MemberDaoImpl.java]

package kr.or.ddit.member.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import kr.or.ddit.util.DBUtil3;
import kr.or.ddit.vo.MemberVO;

public class MemberDaoImpl implements IMemberDao {
	
	private static final Logger logger = Logger.getLogger(MemberDaoImpl.class);
	
	// 1번
	private static MemberDaoImpl dao;
	
	// 2번
	private MemberDaoImpl() {}
	
	// 3번
	public static MemberDaoImpl getInstance() {
		if(dao == null) dao = new MemberDaoImpl();
		return dao;
	}

	@Override
	public int insertMember(MemberVO memVo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr) ";
			sql += " values(?, ?, ?, ?, ?) ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_id());
			pstmt.setString(2, memVo.getMem_pass());
			pstmt.setString(3, memVo.getMem_name());
			pstmt.setString(4, memVo.getMem_tel());
			pstmt.setString(5, memVo.getMem_addr());
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용 데이터 [" + memVo.getMem_id() + ", " + memVo.getMem_pass() + ", " + memVo.getMem_name() + ", " + memVo.getMem_tel() + ", " + memVo.getMem_addr() + "]");
			
			cnt = pstmt.executeUpdate();
			logger.info("실행 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("실행 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}

	@Override
	public int deleteMember(String memId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " delete from mymember where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용된 파라미터 값 [" + memId + "]");
			
			cnt = pstmt.executeUpdate();
			logger.info("멤버 삭제 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("멤버 삭제 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}

	@Override
	public int updateMember(MemberVO memVo) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " update mymember set "
					+ " mem_pass = ?, mem_name = ?, mem_tel = ?, mem_addr = ? "
					+ " where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memVo.getMem_pass());
			pstmt.setString(2, memVo.getMem_name());
			pstmt.setString(3, memVo.getMem_tel());
			pstmt.setString(4, memVo.getMem_addr());
			pstmt.setString(5, memVo.getMem_id());
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용 데이터 [" + memVo.getMem_id() + ", " + memVo.getMem_pass() + ", " + memVo.getMem_name() + ", " + memVo.getMem_tel() + ", " + memVo.getMem_addr() + "]");
			
			cnt = pstmt.executeUpdate();
			logger.info("멤버 수정 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("멤버 수정 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}

	@Override
	public List<MemberVO> getAllMember() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<MemberVO> memList = null; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " select * from mymember ";
			pstmt = conn.prepareStatement(sql);
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				if(memList == null) memList = new ArrayList<MemberVO>();
				
				// 한 개의 레코드가 저장될 VO객체 생성
				MemberVO memVo = new MemberVO();
				
				// ResultSet에서 각 컬럼값들을 가져와 VO의 멤버변수에 저장한다.
				memVo.setMem_id(rs.getString("mem_id"));
				memVo.setMem_pass(rs.getString("mem_pass"));
				memVo.setMem_name(rs.getString("mem_name"));
				memVo.setMem_tel(rs.getString("mem_tel"));
				memVo.setMem_addr(rs.getString("mem_addr"));
				
				// 구성된 VO객체를 List에 추가한다.
				memList.add(memVo);
			}
			
			logger.info("멤버 전체 조회 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("멤버 전체 조회 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(rs != null) try { rs.close(); } catch (SQLException e) {}
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return memList;
	}

	@Override
	public int getMemIdCount(String memId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " select count(*) as cnt from mymember where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용된 파라미터 값 [" + memId + "]");
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				cnt = rs.getInt("cnt");
			}
			
			logger.info("멤버 ID 조회 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("멤버 ID 조회 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(rs != null) try { rs.close(); } catch (SQLException e) {}
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}

	@Override
	public int updateMember2(Map<String, String> paramMap) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int cnt = 0; // 반환값이 저장될 변수
		
		// key값 정보 ==> 회원ID(memid), 수정할컬럼명(field), 수정할데이터(data)
		try {
			conn = DBUtil3.getConnection();
			logger.info("Connection객체 생성 완료...");
			
			String sql = " update mymember set " + paramMap.get("field") + " = ?"
					+ " where mem_id = ? ";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, paramMap.get("data"));
			pstmt.setString(2, paramMap.get("memid"));
			
			logger.debug("PrepareStatement객체 생성 완료...");
			logger.debug("실행 SQL : " + sql);
			logger.debug("사용 데이터 [" + paramMap.get("field") + ", " + paramMap.get("data") + ", " + paramMap.get("memid") + "]");
			
			cnt = pstmt.executeUpdate();
			
			logger.info("멤버 부분 수정 작업 성공~~~");
			
		} catch (SQLException e) {
			logger.error("멤버 부분 수정 작업 실패!!!", e);
			e.printStackTrace();
		} finally {
			if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
			if(conn != null) try { conn.close(); } catch (SQLException e) {}
			logger.info("자원 반납 완료~~~");
		}
		
		return cnt;
	}
	
}

'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글

230926_Servlet 2  (0) 2023.09.26
230925_Servlet 1  (0) 2023.09.25
230921_MyBatis 과제_myBatisBoardTest  (0) 2023.09.21
230921_MyBatis 2  (0) 2023.09.21
230920_MyBatis 1  (0) 2023.09.20