jsp¿¡¼­ log() ÀÌ¿ëÇϱâ

kenu
2002-01-30 6:46¿ÀÈÄ

·Î±× log, Å볪¹«ÀÔ´Ï´Ù. Ã¥¿¡¼­ º¸´Ï ¼±¿øµéÀÌ ³ª¹«¿¡ ³¯Â¥°¡´Â °ÍÀ» Ç¥½ÃÇÏ´Â °Í¿¡¼­ "±â·ÏÀ» ³²±â´Ù"¶ó´Â ¶æÀÌ »ý°å´Ù°í ÇÏ´øµ¥¿ä. Àϸ®°¡ ÀÖ´Â °Í °°½À´Ï´Ù. ¿äÁò Á¦°¡ ÁÁ¾ÆÇϴ å¿¡¼­ Àоú½À´Ï´Ù. ¹«½¼ Ã¥ÀÎÁö´Â ¾È °¡¸£ÃÄ ÁÖÁö¿ä. ^^ »çÀÌÆ® °Ô½ÃÆÇ µÚÁö¸é ³ª¿É´Ï´Ù.

Tomcat 4 ¸¦ ±âÁØÀ¸·Î ÀÌ log() ¿¡ ´ëÇØ¼­ ¾ê±âÇϰíÀÚ ÇÕ´Ï´Ù. ÀÏ´Ü Tocmat 4 ¸¦ ½Ãµ¿ÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ logs µð·ºÅ丮¿¡ log ÆÄÀϵéÀÌ »ý¼ºµË´Ï´Ù. file ¸¶´Ù ³¯Â¥°¡ ºÙ½À´Ï´Ù. ³¯ÀÌ ¹Ù²î¸é »õ·Î¿î ÆÄÀÏÀÌ »ý¼ºÀÌ µË´Ï´Ù.
¼³Ä¡°æ·Î
tomcat °æ·Î: C:\tomcat4
logÆÄÀÏ °æ·Î: C:\tomcat4\logs
        


¿©±â¼­ »ìÆìº¼ ÆÄÀÏÀº 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:\tomcat4\webapps\ROOT\log.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:\tomcat4\logs\localhost_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:\tomcat4\logs\localhost_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:\tomcat4\webapps\ROOT\form.htm
<form action="proc.jsp" method="get">
Áֹεî·Ï¹øÈ£ ¾ÕÀÚ¸®´Â 
  <input type="text" name="jumin1" maxlength="6"> ÀÔ´Ï´Ù.
  <input type="submit" value="Àü¼Û">
</form>
        


c:\tomcat4\webapps\ROOT\proc.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:\tomcat4\webapps\ROOT\proc.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:\tomcat4\work\localhost\_\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:\tomcat4\conf\server.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
xml-typed document
http://okjsp.pe.kr