12. 로그 기록하기
2020. 11. 18. 14:27
728x90
* C 드라이브에 log 폴더 생성
1. Filter 인터페이스의 구현 클래스 작성하기
LogFilter.java
package filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class LogFilter implements Filter{
public void init(FilterConfig config) throws ServletException{
System.out.println("WebMarket 초기화...");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
System.out.println("접속한 클라리언트 IP: " + request.getRemoteAddr());
long start = System.currentTimeMillis();
System.out.println("접근한 URL 경로: " + getURLPath(request));
System.out.println("요청 처리 시작 시각: " + getCurrentTime());
chain.doFilter(request, response);
long end = System.currentTimeMillis();
System.out.println("요청 처리 종료 시각: " + getCurrentTime());
System.out.println("요청 처리 소요 시간: " + (end-start) + "ms ");
System.out.println("=======================================================================");
}
public void destroy() {
}
private String getCurrentTime() {
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return formatter.format(calendar.getTime());
}
private String getURLPath(ServletRequest request) {
HttpServletRequest req;
String currentPath = "";
String queryString = "";
if(request instanceof HttpServletRequest) {
req = (HttpServletRequest)request;
currentPath = req.getRequestURI();
queryString = req.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
}
return currentPath+queryString;
}
}
2. web.xml 파일에 필터 구성하기
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<security-role>
<description></description>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>WebMarket Security</display-name>
<web-resource-collection>
<web-resource-name>WebMarket</web-resource-name>
<description></description>
<url-pattern>/addProduct.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>권한 권리자명</description>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<error-page>
<error-code>404</error-code>
<location>/exceptionNoPage.jsp</location>
</error-page>
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3. Filter 인터페이스의 구현 클래스 작성하기
LogFileFilter.java
package filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class LogFileFilter implements Filter{
PrintWriter writer;
public void init(FilterConfig config) throws ServletException{
String filename = config.getInitParameter("filename");
if(filename == null) {
throw new ServletException("로그 파일의 이름을 찾을 수 없습니다");
}
try {
writer = new PrintWriter(new FileWriter(filename, true), true);
}catch(IOException e) {
throw new ServletException("로그 파일을 열 수 없습니다");
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException {
writer.println("접속한 클라이언트 IP: " + request.getRemoteAddr());
long start = System.currentTimeMillis();
writer.println("접근한 URL 경로: " + getURLPath(request));
writer.println("요청 처리 시작 시각: " + getCurrentTime());
chain.doFilter(request, response);
long end = System.currentTimeMillis();
writer.println("요청 처리 종료 시각: " + getCurrentTime());
writer.println("요청 처리 소요 시간: " + (end-start) + "ms ");
writer.println("=======================================================================");
}
public void destroy() {
writer.close();
}
private String getCurrentTime() {
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return formatter.format(calendar.getTime());
}
private String getURLPath(ServletRequest request) {
HttpServletRequest req;
String currentPath = "";
String queryString = "";
if(request instanceof HttpServletRequest) {
req = (HttpServletRequest)request;
currentPath = req.getRequestURI();
queryString = req.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
}
return currentPath + queryString;
}
}
4. web.xml 파일에 필터 등록하기
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<security-role>
<description></description>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>WebMarket Security</display-name>
<web-resource-collection>
<web-resource-name>WebMarket</web-resource-name>
<description></description>
<url-pattern>/addProduct.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>권한 권리자명</description>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<error-page>
<error-code>404</error-code>
<location>/exceptionNoPage.jsp</location>
</error-page>
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>LogFileFilter</filter-name>
<filter-class>filter.LogFileFilter</filter-class>
<init-param>
<param-name>filename</param-name>
<param-value>c:\\logs\\webmarket.log</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFileFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
728x90
반응형
'Code > Market' 카테고리의 다른 글
11. 예외 처리 페이지 만들기 (0) | 2020.11.18 |
---|---|
10. 상품 등록 페이지의 보안 처리하기 (0) | 2020.11.18 |
09. 상품 등록 페이지의 다국어 처리하기 (0) | 2020.11.18 |
08. 상품 등록 데이터의 유효성 검사하기 (0) | 2020.09.29 |
07. 상품 이미지 등록하기 (0) | 2020.09.29 |