日志的环绕通知(ip获取dubbo版)
来源:互联网 发布:淘宝查号网 编辑:程序博客网 时间:2024/04/29 22:16
package com.sf.inv.eims.aspect;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Date;import javax.annotation.PostConstruct;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;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.stereotype.Component;import com.alibaba.dubbo.rpc.RpcContext;import com.sf.inv.dto.service.RequestBaseDto;import com.sf.novatar.tpl.dao.IConfigDao;import com.sf.novatar.tpl.redis.util.RedisUtil;import com.sf.novatar.tpl.util.DateUtil;import com.sf.novatar.tpl.util.StringUtil;/** * 描述:外部接口调用接口记录 * * <pre> * HISTORY * **************************************************************************** * ID DATE PERSON REASON * 1 2016年8月25日 80002241 Create * **************************************************************************** * </pre> * * @author 80002241 * @since 1.0 */@Component@Aspectpublic class LogAspect {// 日志private Logger logger = LoggerFactory.getLogger(LogAspect.class);@Autowiredprivate IConfigDao configDao;private String TM_CONFIG = "TM_CONFIG_";/** 访问日志打印总开关(ON/OFF) */private String AdviceLogSwitch = "SYS-AdviceLogSwitch";// 最新从redis中获取的时间private static long GETTIME;// 默认为每隔10分钟从redis里面查询一次private static final long MIN = 600000;// 缓存开关的值默认为OFFprivate static String SWITCHVALUE = "OFF";@PostConstructpublic void init() {GETTIME = new Date().getTime();SWITCHVALUE = redis(AdviceLogSwitch);}/** * 切入点测试 */@Pointcut("execution(public * com.sf.inv.eims.service.impl..*.*(..))")public void monitorStateInfo() {}// 环绕通知@Around("monitorStateInfo()")public Object aroundMonitor(ProceedingJoinPoint jPoint) throws Throwable {// 判断是否超过再次的查询的时间间隔if (new Date().getTime() - GETTIME >= MIN) {SWITCHVALUE = redis(AdviceLogSwitch);GETTIME = new Date().getTime();}String methodName = ((MethodSignature) jPoint.getSignature()).getMethod().toString();Object object = null;long methodStart = System.currentTimeMillis();Object[] args = jPoint.getArgs();try {object = jPoint.proceed(args);if ("ON".equals(SWITCHVALUE)) {logger.info("^*^|{}|{}|{}|{}|{}|{}|{}|{}|{}|",new Object[] {methodName,getRequestIp(),getLocalHostAddress(),userInfo(args),getRequestUri(),System.currentTimeMillis() - methodStart,DateUtil.date2Str(new Date(methodStart),"yyyy-MM-dd HH:mm:ss"),"ESG-EIMS-CORE", "" });}} catch (Throwable e) {if ("ON".equals(SWITCHVALUE)) {logger.info("^*^|{}|{}|{}|{}|{}|{}|{}|{}|{}|",new Object[] {methodName,getRequestIp(),getLocalHostAddress(),userInfo(args),getRequestUri(),System.currentTimeMillis() - methodStart,DateUtil.date2Str(new Date(methodStart),"yyyy-MM-dd HH:mm:ss"),"ESG-EIMS-CORE", e.getClass() });}// 将异常抛出去throw e;}return object;}private String getLocalHostAddress() {String hostAddress = "0.0.0.1";try {hostAddress = InetAddress.getLocalHost().getHostAddress();return hostAddress;} catch (UnknownHostException e) {return hostAddress;}}public String getRequestIp() {String remoteHost = "0.0.0.1";try {RpcContext context = RpcContext.getContext();if (null == context) {return remoteHost;} else {remoteHost = context.getRemoteHost();return remoteHost;}} catch (Exception e) {return remoteHost;}}private String getRequestUri() {String url = "";try {RpcContext context = RpcContext.getContext();if (null == context) {return url;} else {url = context.getUrl().toString();url = url.substring(0, url.indexOf("?"));return url;}} catch (Exception e) {return url;}}public String userInfo(Object[] args) {String userName = "system";try {if (args != null && args.length > 0) {Object object = args[0];if (object.getClass().isAssignableFrom(RequestBaseDto.class)) {userName = ((RequestBaseDto) object).getUSERNAME();if (StringUtil.isEmpty(userName)) {userName = "system";}}}return userName;} catch (Exception e) {return userName;}}/** * redis存取工具 * * @return String */private String redis(String key) {String value = RedisUtil.get(TM_CONFIG + key);if (StringUtil.isEmpty(value)) {value = configDao.selectByPrimaryKey(key).getCfgValue();RedisUtil.setAndExpire(TM_CONFIG + key, value, Integer.parseInt(configDao.getValueByCode("SYS-EXPIRE_TIME")));}return value;}}
0 0
- 日志的环绕通知(ip获取dubbo版)
- 日志的环绕通知(ip地址的普通获取版)
- Aop的日志操作(前置,后置,环绕,返回,异常通知)
- spring aop 6 环绕通知记录应用的日志
- struts2的环绕通知
- spring 的环绕通知
- spring 自定义注解annotation+aspect 环绕通知配置对dubbo的consumer监控报警
- SpringAOP环绕通知的使用
- 环绕通知
- 环绕通知
- dubbo 获取application和ip 打印日志,以便排查问题.
- spring的前置通知,后置通知,环绕通知
- Spring AOP annotation 用环绕通知写日志
- spring(十):aop环绕通知
- 基于注解的返回通知、异常通知、环绕通知-佟刚老师《Spring4视频教程》学习笔记(19)
- spring aop 环绕通知around和其他通知的区别
- AOP的一些东西(事务的传播特性,前置,后置,环绕,异常 等各种通知)
- SpringAOPLab--环绕通知1
- 第八周项目3--顺序串算法
- 验证码登陆demo
- iOS10中的极光推送消息的适配
- cin.get(line,ArSize) cin.getline(line,ArSize)和getline(cin,name)读取一行字符串区别
- ssh连接报Connection closed by foreign host.
- 日志的环绕通知(ip获取dubbo版)
- Swift3.0语言教程使用指针创建和初始化字符串
- 1003. Computer Game
- 【第9周 项目1 - 猴子选大王(数组版)】
- 排序算法
- 第八周 建立顺序串的算法库
- embedding_lookup
- 第八周 项目3-顺序串算法
- nginx 中nginx.config 的location配置详解