package com.eactive.eai.rms.common.logging;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.eactive.eai.rms.common.login.SessionManager;
import com.eactive.eai.rms.common.util.IpUtil;

public class UserAccessLogger {
    private static final Logger ACCESS_LOGGER = Logger.getLogger("ACCESS_LOGGER");

    // TYPE
    // S:succeed, F:fail
    // I:insert,  U:update, D:delete,
    // L:list,    M:Memory Sync

    public static void log(HttpServletRequest request, String type, String sub,
            String msg) {
        final String sep = ", ";

        if (type != null) {
            // 대시보드, 메뉴, 승인 관련 로그는 Controller 를 너무 많이 사용하기 때문에 제외시킨다.
            if (type.startsWith("Dashboard") || type.startsWith("Menu")
                    || type.startsWith("Approve") || type.startsWith("NewDashboard")
                    || type.startsWith("checkSession") ) {  // checkSession 제외 YYJ
                return;
            }
            
            // 거래처리 온라인 컨트롤러 도 로그가 빈번하기 때문에 제외시킨다.
            // 공통코드(콤보박스 값조회) 도 제외.
            if( "TransactionOnlineManController".equals(type) ) {
                if( "cmd=MAIN_LIST".equals(msg) 
                   || "cmd=DETAIL_LIST".equals(msg) ) {
                    return;                    
                }
            } else if( "CommonCodeAndNameController".equals(type) ) {
                return;
            } else if( "MainController".equals(type) ) {
            	if( "cmd=null".equals(msg)) {
            		return;
            	}
            }
        }

		
		if (ACCESS_LOGGER.isInfoEnabled()) {
			StringBuilder sb = new StringBuilder();
			sb.append("ID=").append(SessionManager.getUserId(request)).append(sep);
			sb.append("IP=").append(IpUtil.getClientIp(request)).append(sep);
			sb.append("TYPE=").append(type).append(sep);
			sb.append("SUB=").append(sub).append(sep);
			sb.append("MSG=").append(msg).append(sep);
			sb.append("URI=").append(request.getRequestURI());
			ACCESS_LOGGER.info(sb.toString());
		}

    }
}
