0. web.xml 파일 작성
<web-app>
<filter>
<filter-name>logger</filter-name>
<filter-class>filter.LogFilter</filter-class>
<init-param>
<param-name>filename</param-name>
<param-value>D:\\logs\\test.log</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>logger</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
1. 필터 클래스 작성
package filter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class LogFileFilter implements Filter {
private PrintWriter writer;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String filename = filterConfig.getInitParameter("filename");
if(filename == null) {
throw new ServletException("로그 파일의 이름을 찾을 수 없습니다.");
}
try {
// new FileWriter(String filename, boolean append)
// new PrintWriter(Writer out, boolean autoflush)
writer = new PrintWriter(new FileWriter(filename, true), true);
} catch (IOException e) {
throw new ServletException("로그 파일을 열 수 없습니다.");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 시스템 현재 시간(시작시간)
long start = System.currentTimeMillis();
writer.println("접속한 클라이언트 IP : " + request.getRemoteAddr());
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("=====================================================");
}
@Override
public void destroy() {
writer.close();
}
private String getURLPath(ServletRequest request) {
// HttpServletRequest는 ServletRequest를 상속
HttpServletRequest req = null;
String currentPath = "";
String queryString = "";
if(request instanceof HttpServletRequest) {
req = (HttpServletRequest) request;
// 요청 URL
currentPath = req.getRequestURI();
System.out.println("CurrentPath : " + currentPath);
// 쿼리스트링
queryString = req.getQueryString();
System.out.println("QueryString : " + queryString);
queryString = (queryString == null ? "" : "?" + queryString);
}
return currentPath + queryString;
}
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());
}
}
'웹 개발 > 웹 개발' 카테고리의 다른 글
세션(Session) (0) | 2023.01.18 |
---|---|
JSON 데이터를 자바 서블릿에서 Map으로 변환하기 (0) | 2023.01.17 |
HttpServletRequest getServletPath() 와 getPathInfo() 의 차이 (0) | 2023.01.17 |
자바 웹 소켓을 이용한 채팅 서버 (0) | 2023.01.12 |
부트스트랩 span 태그 안의 글자 가운데 정렬하기(수평, 수직) (1) | 2023.01.10 |