japanese site
온라인강좌책메일다운로드동아리쇼핑기술지원기업정보갤러리동영상 블로그
『신개념 4단계 리눅스기술지원 시스템 공개』

※ 『무료 리눅스 배포판 배송서비스』 ※

 
jsp에서 log()이용하기
조회 : 5,057  




jsp에서 log() 이용하기

kenu
2002-01-30 6:46오후

로그 log, 통나무입니다. 책에서 보니 선원들이 나무에 날짜가는 것을 표시하는 것에서 "기록을 남기다"라는 뜻이 생겼다고 하던데요. 일리가 있는 것 같습니다. 요즘 제가 좋아하는 책에서 읽었습니다. 무슨 책인지는 안 가르쳐 주지요. ^^ 사이트 게시판 뒤지면 나옵니다.

Tomcat 4 를 기준으로 이 log() 에 대해서 얘기하고자 합니다. 일단 Tocmat 4 를 시동하면 아래 그림과 같이 logs 디렉토리에 log 파일들이 생성됩니다. file 마다 날짜가 붙습니다. 날이 바뀌면 새로운 파일이 생성이 됩니다.
설치경로
tomcat 경로: C:	omcat4
log파일 경로: C:	omcat4logs


여기서 살펴볼 파일은 localhost_access_log.2002-01-30.txt, localhost_log.2002-01-30.txt 입니다. localhost_access_log.2002-01-30.txt 는 말 그대로 브라우저로 요청을 한 파일들이 기록되는 곳입니다. localhost_log.2002-01-30.txt 는 log() 메소드를 통해서 기록되는 메시지들이 쌓이게 됩니다.

log.jsp 파일을 만들어서 실행해 보겠습니다. 브라우저에는 아무표시도 나지 않을 것입니다.
c:	omcat4webappsROOTlog.jsp
<%
log("okjsp log");
%>


localhost_access_log.2002-01-30.txt 파일을 열어보면 다음과 같이 요청한 파일에 대한 접근 기록이 남아 있습니다. 간단히 설명하자면 ip - - [시간 9000(?)] "요청방식(GET|POST) URI(파일경로) 프로토콜(HTTP)/버전(1.1) 응답상태코드(200|404|...) 파일크기" (9000 은 GMT 시간을 말하는 것 같은데요.). 머리가 좋으신 분들은 아실 것인데요. tomcat 을 standalone 으로 해서 http 서비스도 한다면 html 이나 이미지(gif, jpg, png) 등 요청되는 모든 것이 log 에 기록됩니다. 다른 웹서버와 연동이 되었을 경우는 jsp 와 servlet 만 기록에 남죠. ^^
c:	omcat4logslocalhost_access_log.2002-01-30.txt
127.0.0.1 - - [30/Jan/2002:20:09:22 9000] "GET /log.jsp HTTP/1.1" 200 -
52.32.10.69 - - [30/Jan/2002:20:09:33 9000] "GET /log.jsp HTTP/1.1" 200 -
52.32.10.69 - - [30/Jan/2002:20:10:46 9000] "GET /proc.jsp?jumin1=710624 HTTP/1.1" 200 15
52.32.10.69 - - [30/Jan/2002:20:19:27 9000] "POST /proc.jsp HTTP/1.1" 200 15


localhost_log.2002-01-30.txt 파일을 열어보면 다음과 같이 파일에 대한 기록이 남아 있습니다. jsp 파일을 처음 servlet 으로 변환해서 실행을 하면 jsp: init 라는 로그 메시지가 생깁니다. jsp 파일을 변경 후 다시 컴파일하고 실행할 때에도 같은 메시지가 생깁니다. 그리고 log("okjsp log") 메소드를 통해서 기록된 메시지를 볼 수 있습니다. 위의 access_log 에 있는 시간과 비교해 보십시오.
c:	omcat4logslocalhost_log.2002-01-30.txt
...
2002-01-30 20:09:22 jsp: init
2002-01-30 20:09:22 jsp: okjsp log
2002-01-30 20:09:33 jsp: okjsp log
2002-01-30 20:10:46 jsp: init
...


log 를 사용하는 간단한 예제를 보겠습니다. form.htm 에서 주민번호 앞자리 6개를 받아서 나이를 계산해 보는 예제입니다. method 를 get과 post 로 바꿔서 실행해보십시오.
c:	omcat4webappsROOTform.htm
<form action="proc.jsp" method="get">
주민등록번호 앞자리는 
  <input type="text" name="jumin1" maxlength="6"> 입니다.
  <input type="submit" value="전송">
</form>


c:	omcat4webappsROOTproc.jsp
<%@ page contentType="text/html;charset=euc-kr" import="java.util.Date"%>
<%
String jumin=request.getParameter("jumin1");
int age = 0;
Date today = new Date();
try{
  age = today.getYear() - Integer.parseInt(jumin.substring(0,2)) + 1;
} catch(NullPointerException e) {
    log("Null");
} catch(NumberFormatException e) {
    log(e.getMessage());
    log("jumin: "+jumin);
} catch(Exception e) {
    log("etc: "+e.getMessage());
}
%><%=age %>살이시군요.


위에서 보시면 jumin1 값으로 넘어온 값에 따라서 null 일 경우 log 에 Null 이라고 찍힐 것같지만 substring(0,2)에서 StringIndexOutOfBoundsException 가 먼저 잡힙니다. 숫자가 아닌 문자가 들어올 경우는 에러메시지와 jumin: <입력값> 이 로그에 찍힐 것입니다. log 파일을 보시면 브라우저에서 확인하지 못한 메시지들을 무수히 많이 볼 수 있습니다. linux(unix) 일 경우 tail -f localhost_log.2002-01-30.txt 로 보시면 실시간으로 메시지를 화면에서 확인할 수 있습니다.

log() 메소드는 API 에서 찾아보면 javax.servlet.ServletContext 과 javax.servlet.GenericServlet 패키지에 속한 메소드임을 알 수 있습니다. 아까 log.jsp 파일이 서블릿에서 어떻게 바뀌었는가 구경해보고 마치도록 하겠습니다.
c:	omcat4webappsROOTproc.jsp
log(Exception, String) - Method in interface javax.servlet.ServletContext 
    Deprecated. As of Java Servlet API 2.1, use ServletContext.log(String message, 
    Throwable throwable) instead. 
    This method was originally defined to write an exception's stack trace and an 
    explanatory error message to the servlet log file. 

log(String) - Method in interface javax.servlet.ServletContext 
    Writes the specified message to a servlet log file, usually an event log. 
log(String) - Method in class javax.servlet.GenericServlet 
    Writes the specified message to a servlet log file, prepended by the servlet's 
    name. 
log(String, Throwable) - Method in interface javax.servlet.ServletContext 
    Writes an explanatory message and a stack trace for a given Throwable exception 
    to the servlet log file. 
log(String, Throwable) - Method in class javax.servlet.GenericServlet 
    Writes an explanatory message and a stack trace for a given Throwable exception 
    to the servlet log file, prepended by the servlet's name.


변환된 servlet 소스 파일은 work 디렉토리 아래에서 찾을 수 있습니다. 저 아래 log() 보이죠?
C:	omcat4worklocalhost\_log$jsp.java
...
    static {
    }
    public log$jsp( ) {
    }
...
            _jspxFactory = JspFactory.getDefaultFactory();
            response.setContentType("text/html;charset=ISO-8859-1");
            pageContext = _jspxFactory.getPageContext(this, request, response,
			"", true, 8192, true);

            application = pageContext.getServletContext();
            config = pageContext.getServletConfig();
            session = pageContext.getSession();
            out = pageContext.getOut();

            // begin [file="/log.jsp";from=(0,2);to=(2,0)]
                
                log("okjsp log");
            // end

...



마치기 전에 할 말이 생각이 나서요. log 의 형식과 종류는 server.xml 파일에서 지정할 수 있습니다. 이에 관해서는 번역해 놓은 server.xml 파일(4.0.1 버전)을 참고하세요.
C:	omcat4confserver.xml
...
      <!-- 하위수준에서 지정되지 않았다면 사용되는 Global Logger -->
      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="catalina_log." suffix=".txt"
              timestamp="true"/>
...

        <!-- Access log는 이 가상호스트에 접속하는 모든 요청을 처리합니다. 기본값은
             로그 파일은 $CATALINA_HOME 에 상대적인 "logs" 디렉토리에 생성됩니다.
             "directory" 속성을 이용해서 원하는 다른 디렉토리로 지정할 수 있습니다.
             ($CATALINA_HOME 에 대해) 상대적인 디렉토리나 또는 원하는 디렉토리의 
             절대 경로를 써주면 됩니다.
        -->
        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
                 pattern="common"/>

        <!-- 이 가상 호스트에 관계된 모든 Context 에 의해 공유된 Logger. 기본값은
             (FileLogger 를 사용할 때), 로그 파일들은 $CATALINA_HOME 에 상대적인 
             "logs" 디렉토리에 생성됩니다. "directory" 속성을 이용해서 원하는 다른
             디렉토리로 지정할 수 있습니다. ($CATALINA_HOME 에 대해) 상대적인 디렉
             토리나 또는 원하는 디렉토리의 절대 경로를 써주면 됩니다.
        -->
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
	        timestamp="true"/>

...




에러를 잡는데 유용한 방법입니다. System.out.println("중간값"+val); 을 소스의 중간중간 삽입한 뒤에 실행해도 됩니다만, log() 를 사용하면 시간이 자동으로 찍히는 잇점이 있고, 타이핑 수도 줄어듭니다. 나중에 유용하게 사용하시길...

관련 사이트
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/logger.html
The Logger Component 문서
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/valve.html#Access%20Log%20Valve
Access Log Valve 문서
http://tucows.kr.psi.net/log95.html
log 분석 Utils

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=610


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저

 
   
 


『신개념 4단계 리눅스기술지원 시스템 공개』

CentOS 리눅스 전문서적 국내최초출시

 
회사소개 | 보도기사 | 채용안내 | 광고안내 | 이용약관 | 개인정보취급방침 | 책임한계와 법적고지 | 불편사항 신고하기 | 사이트맵
ㅇ 서울 : 서울특별시 강남구 노현로79길 66, 402호(역삼동,청송빌딩)  ㅇ 부산 : 부산광역시 해운대구 우동 1470 에이스하이테크21 914호
ㅇ 대표 : 1544-8128 ㅇ부산직통 : 051-744-0077 ㅇ서울직통 : 02-856-0055 ㅇ FAX : 02-6280-2663
ㅇ 사업자번호 : 128-86-68239 ㅇ 통신판매업 신고번호 : 2013-부산금정-0035호 ㅇ 개인정보책임자 : 이재석
ㅇ 상호명 : (주) 수퍼유저 ㅇ 대표자 : 박성수
Copyright ⓒ (주)수퍼유저. All rights reserved.

 아 이 디
 비밀번호
회원 가입 | 비밀번호 찾기

블로그~
 
▷ 웹개발언어
PHP
JSP
python
기타
책제목
리눅스서버관리실무바이블v3.0


저자 박성수
페이지수 2,032 pages
펴낸곳(주)수퍼유저

리눅스 서버 구축 및 관리에 필요한 거의 모든 부분과 전반적인 실무 기법들을 다루고 있음
책제목
리눅스보안관리실무(2/E)


저자홍석범
페이지수 820 pages
펴낸곳(주)수퍼유저

리눅스 보안에 관련된 내용을 종합적으로 쓴 책. 저자의 명성 그대로 보안관련의 모든 내용이 그대로 담겨져 있다.