<?xml version="1.0" encoding="euc-kr" ?>
<?xml-stylesheet type="text/xsl" href="../okjsplec_c.xsl" ?>
<lecture>
	<title>jsp¿¡¼­ log() ÀÌ¿ëÇÏ±â</title>
	<who>kenu</who>
	<when>2002-01-30 6:46¿ÀÈÄ</when>
	<what>
		<text>
		·Î±× log, Åë³ª¹«ÀÔ´Ï´Ù. Ã¥¿¡¼­ º¸´Ï ¼±¿øµéÀÌ ³ª¹«¿¡ ³¯Â¥°¡´Â °ÍÀ» Ç¥½ÃÇÏ´Â °Í¿¡¼­ "±â·ÏÀ» ³²±â´Ù"¶ó´Â ¶æÀÌ »ý°å´Ù°í ÇÏ´øµ¥¿ä. ÀÏ¸®°¡ ÀÖ´Â °Í °°½À´Ï´Ù. ¿äÁò Á¦°¡ ÁÁ¾ÆÇÏ´Â Ã¥¿¡¼­ ÀÐ¾ú½À´Ï´Ù. ¹«½¼ Ã¥ÀÎÁö´Â ¾È °¡¸£ÃÄ ÁÖÁö¿ä. ^^ »çÀÌÆ® °Ô½ÃÆÇ µÚÁö¸é ³ª¿É´Ï´Ù.
		</text>
	</what>
	<what>
		<text>
        Tomcat 4 ¸¦ ±âÁØÀ¸·Î ÀÌ log() ¿¡ ´ëÇØ¼­ ¾ê±âÇÏ°íÀÚ ÇÕ´Ï´Ù. ÀÏ´Ü Tocmat 4 ¸¦ ½Ãµ¿ÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ logs µð·ºÅä¸®¿¡ log ÆÄÀÏµéÀÌ »ý¼ºµË´Ï´Ù. file ¸¶´Ù ³¯Â¥°¡ ºÙ½À´Ï´Ù. ³¯ÀÌ ¹Ù²î¸é »õ·Î¿î ÆÄÀÏÀÌ »ý¼ºÀÌ µË´Ï´Ù.
		<¼Ò½º ÆÄÀÏ¸í="¼³Ä¡°æ·Î">
tomcat °æ·Î: C:\tomcat4
logÆÄÀÏ °æ·Î: C:\tomcat4\logs
        </¼Ò½º>
		</text>
		<image>log01_01.gif
		</image>
	</what>
	<what>
		<text>
		¿©±â¼­ »ìÆìº¼ ÆÄÀÏÀº 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() ¸Þ¼Òµå¸¦ ÅëÇØ¼­ ±â·ÏµÇ´Â ¸Þ½ÃÁöµéÀÌ ½×ÀÌ°Ô µË´Ï´Ù.
		</text>
	</what>
	<what>
		<text>
        log.jsp ÆÄÀÏÀ» ¸¸µé¾î¼­ ½ÇÇàÇØ º¸°Ú½À´Ï´Ù. ºê¶ó¿ìÀú¿¡´Â ¾Æ¹«Ç¥½Ãµµ ³ªÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
		<¼Ò½º ÆÄÀÏ¸í="c:\tomcat4\webapps\ROOT\log.jsp">
&lt;%
log("okjsp log");
%>
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>
        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
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>
        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
...
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>
        log ¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ º¸°Ú½À´Ï´Ù. form.htm ¿¡¼­ ÁÖ¹Î¹øÈ£ ¾ÕÀÚ¸® 6°³¸¦ ¹Þ¾Æ¼­ ³ªÀÌ¸¦ °è»êÇØ º¸´Â ¿¹Á¦ÀÔ´Ï´Ù.
        method ¸¦ get°ú post ·Î ¹Ù²ã¼­ ½ÇÇàÇØº¸½Ê½Ã¿À.
		<¼Ò½º ÆÄÀÏ¸í="c:\tomcat4\webapps\ROOT\form.htm">
&lt;form action="proc.jsp" method="get">
ÁÖ¹Îµî·Ï¹øÈ£ ¾ÕÀÚ¸®´Â 
  &lt;input type="text" name="jumin1" maxlength="6"> ÀÔ´Ï´Ù.
  &lt;input type="submit" value="Àü¼Û">
&lt;/form>
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>
		<¼Ò½º ÆÄÀÏ¸í="c:\tomcat4\webapps\ROOT\proc.jsp">
&lt;%@ page contentType="text/html;charset=euc-kr" import="java.util.Date"%>
&lt;%
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());
}
%>&lt;%=age %>»ìÀÌ½Ã±º¿ä.
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>À§¿¡¼­ º¸½Ã¸é jumin1 °ªÀ¸·Î ³Ñ¾î¿Â °ª¿¡ µû¶ó¼­ null ÀÏ °æ¿ì log ¿¡ Null ÀÌ¶ó°í ÂïÈú °Í°°Áö¸¸ substring(0,2)¿¡¼­ StringIndexOutOfBoundsException °¡ ¸ÕÀú ÀâÈü´Ï´Ù. ¼ýÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ°¡ µé¾î¿Ã °æ¿ì´Â ¿¡·¯¸Þ½ÃÁö¿Í jumin: &lt;ÀÔ·Â°ª> ÀÌ ·Î±×¿¡ ÂïÈú °ÍÀÔ´Ï´Ù. log ÆÄÀÏÀ» º¸½Ã¸é ºê¶ó¿ìÀú¿¡¼­ È®ÀÎÇÏÁö ¸øÇÑ ¸Þ½ÃÁöµéÀ» ¹«¼öÈ÷ ¸¹ÀÌ º¼ ¼ö ÀÖ½À´Ï´Ù. linux(unix) ÀÏ °æ¿ì tail -f localhost_log.2002-01-30.txt ·Î º¸½Ã¸é ½Ç½Ã°£À¸·Î ¸Þ½ÃÁö¸¦ È­¸é¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
		</text>
	</what>
	<what>
		<text>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. 
        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>º¯È¯µÈ servlet ¼Ò½º ÆÄÀÏÀº work µð·ºÅä¸® ¾Æ·¡¿¡¼­ Ã£À» ¼ö ÀÖ½À´Ï´Ù. Àú ¾Æ·¡ log() º¸ÀÌÁÒ?
		<¼Ò½º ÆÄÀÏ¸í="C:\tomcat4\work\localhost\_\log$jsp.java">
<![CDATA[
...
    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

...
]]>        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>¸¶Ä¡±â Àü¿¡ ÇÒ ¸»ÀÌ »ý°¢ÀÌ ³ª¼­¿ä. log ÀÇ Çü½Ä°ú Á¾·ù´Â server.xml ÆÄÀÏ¿¡¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿¡ °üÇØ¼­´Â ¹ø¿ªÇØ ³õÀº server.xml ÆÄÀÏ(4.0.1 ¹öÀü)À» Âü°íÇÏ¼¼¿ä.
		<¼Ò½º ÆÄÀÏ¸í="C:\tomcat4\conf\server.xml">
<![CDATA[
...
      <!-- ÇÏÀ§¼öÁØ¿¡¼­ ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù¸é »ç¿ëµÇ´Â 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"/>

...

]]>        </¼Ò½º>
		</text>
	</what>
	<what>
		<text>¿¡·¯¸¦ Àâ´Âµ¥ À¯¿ëÇÑ ¹æ¹ýÀÔ´Ï´Ù. System.out.println("Áß°£°ª"+val); À» ¼Ò½ºÀÇ Áß°£Áß°£ »ðÀÔÇÑ µÚ¿¡ ½ÇÇàÇØµµ µË´Ï´Ù¸¸, log() ¸¦ »ç¿ëÇÏ¸é ½Ã°£ÀÌ ÀÚµ¿À¸·Î ÂïÈ÷´Â ÀÕÁ¡ÀÌ ÀÖ°í, Å¸ÀÌÇÎ ¼öµµ ÁÙ¾îµì´Ï´Ù. ³ªÁß¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÏ½Ã±æ...  
		</text>
	</what>
	<refer>
		<link>http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/logger.html</link>
		<comment>The Logger Component ¹®¼­</comment>
	</refer>
	<refer>
		<link>http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/valve.html#Access%20Log%20Valve</link>
		<comment>Access Log Valve ¹®¼­</comment>
	</refer>
	<refer>
		<link>http://tucows.kr.psi.net/log95.html</link>
		<comment>log ºÐ¼® Utils</comment>
	</refer>
</lecture>
