You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.9 KiB
Java
136 lines
3.9 KiB
Java
package com.ruoyi.common.utils;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
import java.util.Map;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.apache.shiro.SecurityUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import com.ruoyi.common.json.JSON;
|
|
|
|
/**
|
|
* 处理并记录日志文件
|
|
*
|
|
* @author ruoyi
|
|
*/
|
|
public class LogUtils
|
|
{
|
|
public static final Logger ERROR_LOG = LoggerFactory.getLogger("sys-error");
|
|
public static final Logger ACCESS_LOG = LoggerFactory.getLogger("sys-access");
|
|
|
|
/**
|
|
* 记录访问日志 [username][jsessionid][ip][accept][UserAgent][url][params][Referer]
|
|
*
|
|
* @param request
|
|
* @throws Exception
|
|
*/
|
|
public static void logAccess(HttpServletRequest request) throws Exception
|
|
{
|
|
String username = getUsername();
|
|
String jsessionId = request.getRequestedSessionId();
|
|
String ip = IpUtils.getIpAddr(request);
|
|
String accept = request.getHeader("accept");
|
|
String userAgent = request.getHeader("User-Agent");
|
|
String url = request.getRequestURI();
|
|
String params = getParams(request);
|
|
|
|
StringBuilder s = new StringBuilder();
|
|
s.append(getBlock(username));
|
|
s.append(getBlock(jsessionId));
|
|
s.append(getBlock(ip));
|
|
s.append(getBlock(accept));
|
|
s.append(getBlock(userAgent));
|
|
s.append(getBlock(url));
|
|
s.append(getBlock(params));
|
|
s.append(getBlock(request.getHeader("Referer")));
|
|
getAccessLog().info(s.toString());
|
|
}
|
|
|
|
/**
|
|
* 记录异常错误 格式 [exception]
|
|
*
|
|
* @param message
|
|
* @param e
|
|
*/
|
|
public static void logError(String message, Throwable e)
|
|
{
|
|
String username = getUsername();
|
|
StringBuilder s = new StringBuilder();
|
|
s.append(getBlock("exception"));
|
|
s.append(getBlock(username));
|
|
s.append(getBlock(message));
|
|
ERROR_LOG.error(s.toString(), e);
|
|
}
|
|
|
|
/**
|
|
* 记录页面错误 错误日志记录 [page/eception][username][statusCode][errorMessage][servletName][uri][exceptionName][ip][exception]
|
|
*
|
|
* @param request
|
|
*/
|
|
public static void logPageError(HttpServletRequest request)
|
|
{
|
|
String username = getUsername();
|
|
|
|
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
|
|
String message = (String) request.getAttribute("javax.servlet.error.message");
|
|
String uri = (String) request.getAttribute("javax.servlet.error.request_uri");
|
|
Throwable t = (Throwable) request.getAttribute("javax.servlet.error.exception");
|
|
|
|
if (statusCode == null)
|
|
{
|
|
statusCode = 0;
|
|
}
|
|
|
|
StringBuilder s = new StringBuilder();
|
|
s.append(getBlock(t == null ? "page" : "exception"));
|
|
s.append(getBlock(username));
|
|
s.append(getBlock(statusCode));
|
|
s.append(getBlock(message));
|
|
s.append(getBlock(IpUtils.getIpAddr(request)));
|
|
|
|
s.append(getBlock(uri));
|
|
s.append(getBlock(request.getHeader("Referer")));
|
|
StringWriter sw = new StringWriter();
|
|
|
|
while (t != null)
|
|
{
|
|
t.printStackTrace(new PrintWriter(sw));
|
|
t = t.getCause();
|
|
}
|
|
s.append(getBlock(sw.toString()));
|
|
getErrorLog().error(s.toString());
|
|
|
|
}
|
|
|
|
public static String getBlock(Object msg)
|
|
{
|
|
if (msg == null)
|
|
{
|
|
msg = "";
|
|
}
|
|
return "[" + msg.toString() + "]";
|
|
}
|
|
|
|
protected static String getParams(HttpServletRequest request) throws Exception
|
|
{
|
|
Map<String, String[]> params = request.getParameterMap();
|
|
return JSON.marshal(params);
|
|
}
|
|
|
|
protected static String getUsername()
|
|
{
|
|
return (String) SecurityUtils.getSubject().getPrincipal();
|
|
}
|
|
|
|
public static Logger getAccessLog()
|
|
{
|
|
return ACCESS_LOG;
|
|
}
|
|
|
|
public static Logger getErrorLog()
|
|
{
|
|
return ERROR_LOG;
|
|
}
|
|
}
|