package org.jplus.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.jplus.hyb.database.DatabaseINI; import org.jplus.hyb.database.Hyberbin; import org.jplus.table.Log; /** * * @author Admin_d */ public class JplusLogger implements Logger { public final static int SYSTEMLOG = 0; public final static int ERROR = 1; public final static int NORMALLOG = 2; /** * 实现了记录日志的方法 这里采用JDK自带来的日志 * * @param message 操作信息 * @param ex Exception */ @Override public void getLogger(String message, Exception ex) { ex.printStackTrace(); // System.out.println(message); // String error = getError(ex); // System.out.println(error); //构建log类 // Log log = new Log(); // log.setMessage(message); // log.setType(SYSTEMLOG); // if (ex != null) { // log.setMessage("[" + message + "]:[" + ex.getMessage() + "]:[" + error + "]"); // log.setType(ERROR); // } // log(log); } /** * 设置日志类 * * @param logger 日志类 */ @Override public void setLogger(Logger logger) { logger = new JplusLogger(); } @Override public void debug(String message) { // System.out.println(message); } public static void log(HttpServletRequest request, String message) { System.out.println(message); Log log = new Log(); log.setType(NORMALLOG); log.setIp(getIp(request)); log.setMessage("url:[" + request.getRequestURI() + "][" + request.getQueryString() + "][" + message + "]"); Object user = request.getSession().getAttribute("user"); if (user != null) { log.setUsername((String) ((Map) user).get("yhm")); } // log(log); } private synchronized static void log(Log log) { Hyberbin hyberbin = new Hyberbin(log); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); log.setLogtime(df.format(new Date())); if (DatabaseINI.isSqlout) { DatabaseINI.isSqlout = false; log.setType(SYSTEMLOG); hyberbin.insert("id"); DatabaseINI.isSqlout = true; } else { log.setMessage(log.getMessage().replace("[null]", "")); hyberbin.insert("id"); } } @Override public void getLogger(Object object, String message, Exception ex) { System.out.println(message); String error = getError(ex); System.out.println(error); HttpServletRequest request = (HttpServletRequest) object; Log log = new Log(); log.setType(ERROR); log.setIp(getIp(request)); log.setMessage("url:[" + request.getRequestURI() + "][" + request.getQueryString() + "][" + ex.getMessage() + "]:[" + error + "]"); Object user = request.getSession().getAttribute("user"); if (user != null) { log.setUsername((String) ((Map) user).get("yhm")); } // log(log); } /** * 获得客户端IP地址 * * @return */ public static String getIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip.trim())) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip.trim())) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip.trim())) { ip = request.getRemoteAddr(); } return ip; } @Override public void info(String message) { System.out.println(message); Log log = new Log(); log.setType(NORMALLOG); log.setMessage(message); // log(log); } private static String getError(Exception ex) { ex.printStackTrace(); if (ex != null) { StringBuilder builder = new StringBuilder(); StackTraceElement[] stackTrace = ex.getStackTrace(); for (StackTraceElement ste : stackTrace) { String errorString = ste.toString(); if (!errorString.startsWith("org.apache") && !errorString.startsWith("com.mysql")) { builder.append(errorString).append("\n"); } } return builder.toString(); } else { return ""; } } }