log4j.properties
public class T01_MemberInfoTest {
private Connection conn;
private Statement stmt;
private PreparedStatement pstmt;
private ResultSet rs;
private Scanner scan = new Scanner(System.in);
private static final Logger SQL_LOGGER =
Logger.getLogger("log4jexam.sql.Query");
private static final Logger PARAM_LOGGER =
Logger.getLogger("log4jexam.sql.Parameter");
private static final Logger RESULT_LOGGER =
Logger.getLogger(T01_MemberInfoTest.class);
인서트 메소드
// 회원을 추가하는 메서드
private void insertMember() {
boolean chk = false; //등록여부 체크
String memId ="";
do {
System.out.println();
System.out.println("추가할 회원정보를 입력하세요");
System.out.print("회원 ID : ");
memId = scan.next();
chk = checkMember(memId);
if(chk==true) {
System.out.println("회원ID가 "+memId+"인 회원은 이미 존재합니다");
System.out.println("다시 입력하세요");
}
} while(chk==true);
System.out.println("회원이름 >> ");
String memName = scan.next();
System.out.println("회원 전화번호 >> ");
String memTel = scan.next();
scan.nextLine(); // 버퍼 비우기
System.out.println("회원주소 >> ");
String memAddr = scan.nextLine();
try {
conn = JDBCUtil2.getConnection();
String sql ="insert into mymember " +
" (mem_id,MEM_NAME, mem_tel, mem_addr) " +
" values "
+" (?,?,?,?)";
SQL_LOGGER.debug("쿼리 : "+sql);
//stmt는 보안에 취약해 권고되지 않는다.
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
pstmt.setString(2, memName);
pstmt.setString(3, memTel);
pstmt.setString(4, memAddr);
PARAM_LOGGER.debug("memId = "+memId
+ ", memName = "+ memName
+ ", memTel = "+ memTel
+ ", memAddr = "+ memAddr);
// insert핧거니까 update
int cnt = pstmt.executeUpdate();
RESULT_LOGGER.debug("실행결과 : "+cnt);
// insert시 업데이트 된 레코드의 수를 cnt에 넣기
if(cnt>0) {
System.out.println(memId+"회원 추가 작업 성공");
}else {
System.out.println(memId+"회원 추가 작업 실패");
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
// 커넥션을 해제해 주지 않으면 오라클 서버에서 메모리를 소비하고 있는 채로 유지되게 된다
JDBCUtil2.close(conn, stmt, pstmt, rs);
}
}
그러나 실행해도 로거가 뜨지 않음!
왜?>>
INFO레벨의 것들만 보려고 Default로 선언해뒀기 때문에!
디버그로 바꾸면
뜬다
인포로 두면
디버그, 인포, 워닝중 인포 이상인건 인포와 워닝이므로
로그에 인포와 워닝만 뜬다
if 내가 만든 특정 로거만 레벨을 컨트롤 하고싶다!
아까 주석처리한 부분
맨위,,, 디폴트값을 처음에 가졌지만 얘가 구체화해서 덮어쓴거니까 디버그까진 보고싶다는 뜻이 됨. 즉 이제 쿼리가 나옴
쿼리를 디버그부터 볼 수 있ㅈ도록 설정했으니 디버그로 설정한 쿼리는 보이게됨
파라미터는 info로 설정했는데 error부터 볼 수있게 했으니 안나와
리절트는 워닝으로 남겼으니 나와
ibatis도 해볼까
로그4j 추가
빌드패스도 잡아주기
디버그로 설정
MemberInfoMain을 실행하면
아이바티스 개발팀에서 남긴 로그를 확인 할 수 있다