Log4j

서현서현·2022년 4월 21일
0

서블릿 & JSP

목록 보기
4/26
post-thumbnail

Log4j

  • Java를 위한 로그 (Log for Java)
  • 로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구(오픈소스) 즉 로깅프레임워크
  • syso로 할때는 보고싶지 않은 경고도 다 봐야했는데 log사용시 보고싶은 메세지만 볼 수 있도록 설정 할 수 있다

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을 실행하면

아이바티스 개발팀에서 남긴 로그를 확인 할 수 있다

0개의 댓글