成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

封裝系統(tǒng)全局操作日志aop攔截且可打包給其他項(xiàng)目依賴

封裝系統(tǒng)全局操作日志aop攔截且可打包給其他項(xiàng)目依賴,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),正藍(lán)企業(yè)網(wǎng)站建設(shè),正藍(lán)品牌網(wǎng)站建設(shè),網(wǎng)站定制,正藍(lán)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,正藍(lán)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在開發(fā)過程中,為了更快地排錯(cuò),更好得了解接口訪問量,可以選擇用aop做全局的操作攔截,在項(xiàng)目不止一個(gè)的時(shí)候,我們可以選擇獨(dú)立出來,新項(xiàng)目可以很快的加上全局操作日志,具體代碼及數(shù)據(jù)庫(kù)表設(shè)計(jì)如下:

1.數(shù)據(jù)庫(kù)MySQL表結(jié)構(gòu)設(shè)計(jì),如下圖(可根據(jù)需要加減字段):
封裝系統(tǒng)全局操作日志aop攔截且可打包給其他項(xiàng)目依賴

2.可以根據(jù)表結(jié)構(gòu)逆向生成相關(guān)實(shí)體類及Mapper,此步驟相對(duì)簡(jiǎn)單(略)

3.增加全局日志切面類

**
 * @author songlonghui
 * @ClassName SystemLogAspect
 * @Description 日志切面記錄
 * @date 2019/7/24 16:38
 * @Version 1.0
 */
@Component
@Aspect
public class SystemLogAspect {

    private Logger logger = LoggerFactory.getLogger(SystemLogAspect.class);

    @Autowired
    private SystemLogDao systemLogDao;

    /*@Value("${LOG_POINT_URL}")
    private String logPointUrl;*/

    /** 以 controller 包下定義的所有請(qǐng)求為切入點(diǎn) */
    @Pointcut("execution(public * com.machinsight.*.*.controller..*.*(..)) && !@annotation(com.machinsight.system_log.core.annotation.NoAspectAnnotation)")
    public void webLog() {
        //logger.warn("切點(diǎn)路徑---------->" + logPointUrl);
    }

    //private SystemLogWithBLOBs systemLogWithBLOBs;

    /**
     * 在切點(diǎn)之前織入
     * @param joinPoint
     * @throws Throwable
     */
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 開始打印請(qǐng)求日志
        //logger.info("=========================================== Start ===========================================");
    }

    /**
     * 在切點(diǎn)之后織入
     * @throws Throwable
     */
    @After("webLog()")
    public void doAfter() throws Throwable {
        logger.info("=========================================== End ===========================================");
        // 每個(gè)請(qǐng)求之間空一行
        logger.info("");
    }

    /**
     * 環(huán)繞
     * @param proceedingJoinPoint
     * @return
     * @throws Throwable
     */
    @Around("webLog()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        // 開始時(shí)間
        long startTime = System.currentTimeMillis();
        SystemLogWithBLOBs systemLogWithBLOBs = new SystemLogWithBLOBs();
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (null != attributes){
            HttpServletRequest request = attributes.getRequest();
            logger.error("當(dāng)前線程號(hào):--doAround--" + Thread.currentThread());
            String url = request.getRequestURL().toString();
            String description = proceedingJoinPoint.getSignature().getDeclaringTypeName();
            String requestArgs = FastJsonUtils.toJSONNoFeatures(proceedingJoinPoint.getArgs()).replaceAll("\\\\","");
            String ip = UuidUtil.getIpAddr(request);
            // 打印請(qǐng)求相關(guān)參數(shù)
            logger.info("========================================== Start ==========================================");
            // 打印請(qǐng)求 url
            logger.info("請(qǐng)求URL            : {}", url);
            // 打印 Http method
            logger.info("HTTP請(qǐng)求方法 Method    : {}", request.getMethod());
            // 打印調(diào)用 controller 的全路徑以及執(zhí)行方法
            logger.info("Class--Controller 全路徑以及執(zhí)行方法 Method   : {}.{}", description);
            // 打印請(qǐng)求的 IP
            logger.info("請(qǐng)求IP             : {}", ip);
            // 打印請(qǐng)求入?yún)?
            logger.info("請(qǐng)求參數(shù)Request Args   : {}", requestArgs);
            // 記錄日志入庫(kù)
            String value = request.getHeader("user-agent");  // 用戶代理信息
            //
            systemLogWithBLOBs.setCreateTime(new Date());  // 請(qǐng)求參數(shù)
            systemLogWithBLOBs.setMethod(url);  // 接口地址
            systemLogWithBLOBs.setRequestIp(ip);  //請(qǐng)求ip
            systemLogWithBLOBs.setRequestArgs(requestArgs);  // 請(qǐng)求參數(shù)
            systemLogWithBLOBs.setUserAgent(value); // 用戶代理信息
            systemLogWithBLOBs.setDescription(description);
        }
        Object result = null;
        try {
            result = proceedingJoinPoint.proceed();

            String responseArgs = FastJsonUtils.toJSONNoFeatures(result).replaceAll("\\\\","");

            long useTime = System.currentTimeMillis() - startTime;

            // 打印出參
            logger.info("具體返回參數(shù) Response Args  : {}", responseArgs);
            // 執(zhí)行耗時(shí)
            logger.info("整體執(zhí)行耗時(shí) Time-Consuming : {} ms", useTime);
            systemLogWithBLOBs.setResponseArgs(responseArgs);
            systemLogWithBLOBs.setTimeConsuming(Integer.valueOf(String.valueOf(useTime)));
        } catch (Throwable throwable) {
            // 設(shè)置異常信息
            systemLogWithBLOBs.setIsException(1);
            // 異常信息
            systemLogWithBLOBs.setExceptionDetail(throwable.getMessage());
            // 耗時(shí)
            long exceptionTime = System.currentTimeMillis() - startTime;
            systemLogWithBLOBs.setTimeConsuming(Integer.valueOf(String.valueOf(exceptionTime)));
            // 異常返回參數(shù)
            JsonResult jsonResult = new JsonResult();
            jsonResult.setMsg(CrmConstant.OPS_FAILED_MSG);
            jsonResult.setSuccess(CrmConstant.OPS_FAILED_CODE);
            jsonResult.setData(throwable.getMessage());
            String responseArgsForException = FastJsonUtils.toJSONNoFeatures(jsonResult);
            systemLogWithBLOBs.setResponseArgs(responseArgsForException);
            // 拋出異常
            throw new Throwable(throwable.getMessage());
        } finally {
            systemLogDao.insertSelective(systemLogWithBLOBs);
        }
        return result;
    }

4.可根據(jù)公司項(xiàng)目的整體包結(jié)構(gòu)配置切點(diǎn),還可以增加不需要攔截的配置,為了更靈活細(xì)化,這里增加了相應(yīng)注解類,如下:

/**
 * 切面排除注解類
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NoAspectAnnotation {

}

5.只要在不需要的攔截的controller方法加上注解@NoAspectAnnotation即可,切點(diǎn)會(huì)自動(dòng)排除:

/**
 * @author songlonghui
 * @ClassName CommonController
 * @Description TODO
 * @date 2019/8/23 16:09
 * @Version 1.0
 */
@Controller
@RequestMapping("common")
public class CommonController {

    @ResponseBody
    @RequestMapping("/test")
    @NoAspectAnnotation
    public String testLog(@RequestBody String inputJson) throws Exception{
        String msg = "操作成功";
        return msg;
    }

}

6.只要在別的項(xiàng)目中增加該項(xiàng)目依賴即可:

<!-- 全局日志切面 -->
<dependency>
   <groupId>com.machinsight</groupId>
   <artifactId>system_log</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <exclusions>
      <exclusion>
         <artifactId>*</artifactId>
         <groupId>*</groupId>
      </exclusion>
   </exclusions>
</dependency>

有需要整體項(xiàng)目源碼的朋友可以聯(lián)系我,現(xiàn)在還沒有想好源碼放在什么地方供別人下載??!
郵箱地址:lance911215@outlook.com

關(guān)于封裝系統(tǒng)全局操作日志aop攔截且可打包給其他項(xiàng)目依賴問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

文章題目:封裝系統(tǒng)全局操作日志aop攔截且可打包給其他項(xiàng)目依賴
路徑分享:http://jinyejixie.com/article30/pshipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、Google、定制開發(fā)建站公司、網(wǎng)站內(nèi)鏈、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
称多县| 图木舒克市| 延庆县| 镇雄县| 绥阳县| 禹城市| 禹城市| 太和县| 长丰县| 河津市| 且末县| 阿合奇县| 仙游县| 巨鹿县| 西吉县| 江川县| 苍南县| 青铜峡市| 上思县| 陵水| 临颍县| 三江| 太仆寺旗| 白水县| 望江县| 武鸣县| 西城区| 仙游县| 丽水市| 汉川市| 云南省| 张掖市| 陇南市| 柯坪县| 留坝县| 白朗县| 锦屏县| 湛江市| 鄱阳县| 朔州市| 金昌市|