b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Spring AOP实现后台管理系统日志管理

电脑杂谈  发布时间:2019-05-08 18:10:53  来源:网络整理

spring aop日志_spring aop 注解 日志_spring 系统日志

设计原则和思路:

元注解方式结合AOP,灵活记录操作日志能够记录详细错误日志为运维提供支持日志记录尽可能减少性能影响

1.定义日志记录元注解

spring aop 注解 日志_spring 系统日志_spring aop日志

需要执行清除操作时(关闭文件、关闭网络连接等)可以定义,当然更好的办法是定义一个close()方法显式的执行关闭操作。定义:用于实现进程间同步的工具称作同步机制,亦称同步设施 (synchronization mechanism). 目前, 人们已经研究出许多种用于进程之间同步的机制, 比较早期 的如: 信号灯与pv操作、管程、条件临界区、路径表达式等, 这些 都属于集中式系统中所使用的同步设施. . 一种同步机制应当满足如下几个基本要求: (1) 描述能力够用: 即用此种同步机制应当能够描述操作系统及并发 程序设计中所遇到的各种同步问题 (例如生产者消费者问题、读 者写者问题、哲学家就餐问题)。部分注解信息中的method = "prepare"方法,如果存在要拦截的方法,则执行paginationinterceptor中的intercept方法做拦截处理,加上分页条件等。

2.定义用于记录日志的实体类

package com。myron。ims。bean;import java。io。Serializable;import com。myron。common。util。StringUtils;import com。myron。common。util。UuidUtils;import com。fasterxml。jackson。annotation。JsonFormat;import java。util。Date;import java。util。Map;/** * 日志类-记录用户操作行为 * @author lin。r。x * */public class Log implements Serializable{private static final long serialVersionUID = 1L;private String logId;//日志主键private String type;//日志类型private String title;//日志标题private String remoteAddr;//请求地址private String requestUri;//URIprivate String method;//请求方式private String params;//提交参数private String exception;//异常@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date OperateDate;//开始时间private String timeout;//结束时间private String userId;//用户IDpublic String getLogId() {return StringUtils。

spring aop 注解 日志_spring 系统日志_spring aop日志

isBlank(logId) ? logId : logId。spring 系统日志trim();}public void setLogId(String logId) {this。logId = logId;}public String getType() {return StringUtils。isBlank(type) ? type : type。trim();}public void setType(String type) {this。type = type;}public String getTitle() {return StringUtils。isBlank(title) ? title : title。trim();}public void setTitle(String title) {this。title = title;}public String getRemoteAddr() {return StringUtils。isBlank(remoteAddr) ? remoteAddr : remoteAddr。trim();}public void setRemoteAddr(String remoteAddr) {this。

remoteAddr = remoteAddr;}public String getRequestUri() {return StringUtils。isBlank(requestUri) ? requestUri : requestUri。trim();}public void setRequestUri(String requestUri) {this。requestUri = requestUri;}public String getMethod() {return StringUtils。isBlank(method) ? method : method。trim();}public void setMethod(String method) {this。method = method;}public String getParams() {return StringUtils。isBlank(params) ? params : params。trim();}public void setParams(String params) {this。params = params;}/*** 设置请求参数* @param paramMap*/public void setMapToParams(Map<String, String[]> paramMap) {if (paramMap == null){return;}StringBuilder params = new StringBuilder();for (Map。

Entry<String, String[]> param : ((Map<String, String[]>)paramMap)。entrySet()){params。append((""。equals(params。toString()) ? "" : "&") + param。getKey() + "=");String paramValue = (param。getValue() != null && param。getValue()。length > 0 ? param。getValue()[0] : "");params。append(StringUtils。abbr(StringUtils。endsWithIgnoreCase(param。getKey(), "passWord") ? "" : paramValue, 100));}this。params = params。toString();}public String getException() {return StringUtils。isBlank(exception) ? exception : exception。

spring 系统日志_spring aop 注解 日志_spring aop日志

trim();}public void setException(String exception) {this。spring 系统日志exception = exception;}public Date getOperateDate() {return operateDate;}public void setOperateDate(Date operateDate) {this。operateDate = operateDate;}public String getTimeout() {return StringUtils。isBlank(timeout) ? timeout : timeout。trim();}public void setTimeout(String timeout) {this。timeout = timeout;}public String getUserId() {return StringUtils。isBlank(userId) ? userId : userId。trim();}public void setUserId(String userId) {this。userId = userId;}}

3.定义日志AOP切面类

package com.myron.ims.aop;import java.lang.reflect.Method;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.Httpsession;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.NamedThreadLocal;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import org.springframework.stereotype.Component;import com.myron.common.util.DateUtils;import com.myron.common.util.UuidUtils;import com.myron.ims.annotation.SystemControllerLog;import com.myron.ims.annotation.SystemServiceLog;import com.myron.ims.bean.Log;import com.myron.ims.bean.User;import com.myron.ims.service.LogService;/** * 系统日志切面类 * @author lin.r.x * */@Aspect@Componentpublic class SystemLogAspect {private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect. class);private static final ThreadLocal<Date> beginTimeThreadLocal =new NamedThreadLocal<Date>("ThreadLocal beginTime");private static final ThreadLocal<Log> logThreadLocal =new NamedThreadLocal<Log>("ThreadLocal log");private static final ThreadLocal<User> currentUser=new NamedThreadLocal<>("ThreadLocal user");@Autowired(required=false)private HttpServletRequest request;@Autowiredprivate ThreadPoolTaskExecutor threadPoolTaskExecutor;@Autowiredprivate LogService logService;/*** Controller层切点 注解拦截*/@Pointcut("@annotation(com.myron.ims.annotation.SystemControllerLog)")public void controllerAspect(){}/*** 前置通知 用于拦截Controller层记录用户的操作的开始时间* @param joinPoint 切点* @throws InterruptedException*/@Before("controllerAspect()")public void doBefore(JoinPoint joinPoint) throws InterruptedException{Date beginTime=new Date();beginTimeThreadLocal.set(beginTime);//线程绑定变量(该数据只有当前请求的线程可见)if (logger.isDebugEnabled()){//这里日志级别为debuglogger.debug("开始计时: {} URI: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(beginTime), request.getRequestURI());}//读取session中的用户HttpSession session = request.getSession();User user = (User) session.getAttribute("ims_user");currentUser.set(user);}/*** 后置通知 用于拦截Controller层记录用户的操作* @param joinPoint 切点*/@SuppressWarnings("unchecked")@After("controllerAspect()")public void doAfter(JoinPoint joinPoint) {User user = currentUser.get();if(user !=null){String title="";String type="info";//日志类型(info:入库,error:错误)String remoteAddr=request.getRemoteAddr();//请求的IPString requestUri=request.getRequestURI();//请求的UriString method=request.getMethod();//请求的方法类型(post/get)Map<String,String[]> params=request.getParameterMap(); //请求提交的参数try {title=getControllerMethodDescription2(joinPoint);} catch (Exception e) {e.printStackTrace();}// 打印JVM信息。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-97205-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 杨标
      杨标

      装备落后的体现以及人员素质低于日本人的体现

    • 李安全
      李安全

      胡扯

    热点图片
    拼命载入中...