3.33统一记录日志

统一记录日志 并不仅仅记录异常

能不能利用 控制器通知 来统一处理呢?

控制器通知 只能在控制器 发生异常的时候 统一处理。而统一记录日志 不发生异常也需要记录
能否利用拦截器呢?拦截器是针对控制器的处理。而记日志未必只是针对控制器

也可能是针对业务组件。
也可能是数据访问层。
在这里插入图片描述
统一记录日志 可以对所有模块的 services方法记日志
在这里插入图片描述

AOP是一种编程思想,是对面向对象(OOP)的补充,可以进一步提高编程的效率。

AOP和OOP是互补关系,并非竞争。
在这里插入图片描述

AOP的术语:

在这里插入图片描述

AOP的实现在这里插入图片描述

在这里插入图片描述
例子:
新建aspect包,AlphaAspect实例

package com.nowcoder.community.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component//将其声明为bean,然后让容器来管理
@Aspect//表明其为 方面组件
public class AlphaAspect {

    @Pointcut("execution(* com.nowcoder.community.service.*.*(..))")//括号里描述 哪些bean,哪些方法是我要处理的目标。service.*表示service下的所有业务组件。service.*.*下一个.*代表所有方法的返回值。(..)表示所有参数
    public void pointcut() {//定义切点

    }

    @Before("pointcut()")//在连接点pointcut 前面记日志
    public void before() {
        System.out.println("before");
    }

    @After("pointcut()")//在连接点pointcut 后面记日志
    public void after() {
        System.out.println("after");
    }

    @AfterReturning("pointcut()")//在返回值以后
    public void afterRetuning() {
        System.out.println("afterRetuning");
    }

    @AfterThrowing("pointcut()")//抛异常之后织入代码
    public void afterThrowing() {
        System.out.println("afterThrowing");
    }

    @Around("pointcut()")//前后都织入逻辑  ProceedingJoinPoint,程序织入的 部位
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("around before");
        Object obj = joinPoint.proceed();
        System.out.println("around after");
        return obj;
    }

}

以上代码对community.service所有代码都有效,而service所有代码都不用改

测试:
首页:
在这里插入图片描述
控制台:
在这里插入图片描述

控制台输出多次这样的标志,因为调用了很多次业务组件,每次调用都会触发
且按如上顺序。

因为程序没有报错,所以不会输出"afterThrowing"

一个正式实例:

ServiceLogAspect

package com.nowcoder.community.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
@Aspect
public class ServiceLogAspect {

    private static final Logger logger = LoggerFactory.getLogger(ServiceLogAspect.class);//因为要记日志,所以要实例化Logger

    @Pointcut("execution(* com.nowcoder.community.service.*.*(..))")
    public void pointcut() {

    }

    @Before("pointcut()")//使用前置通知
    public void before(JoinPoint joinPoint) {
        // 日志格式:用户[1.2.3.4](这是ip地址),在[xxx](时间),访问了[com.nowcoder.community.service.xxx()](某种功能).
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// (ServletRequestAttributes) 是RequestContextHolder.getRequestAttributes();返回的子类型
        HttpServletRequest request = attributes.getRequest();//得到request,就有了ip地址。
        String ip = request.getRemoteHost();//得到ip
        String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());//按格式yyyy-MM-dd HH:mm:ss  拼一个时间
        String target = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();//joinPoint.getSignature().getDeclaringTypeName()得到类名。joinPoint.getSignature().getName()得到方法名。
        logger.info(String.format("用户[%s],在[%s],访问了[%s].", ip, now, target));//logger级别是info,因为没有报错。用String.format方法来拼
    }

}

测试:

重新编译

刷新首页
在这里插入图片描述
控制台打印如下:
在这里插入图片描述
在这里插入图片描述

总之:
统一记录日志 并不仅仅记录异常
可否利用 上节课所讲 控制器通知处理,控制器通知仅仅是在控制器发生异常时可以统一处理
可否利用 拦截器 拦截所有请求,但是 拦截器仅仅是针对控制器处理的,我们记录日志未必是对 控制器的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 规约测试工具V3.33是一款IT领域的自动化测试工具,集成了多种规约测试方法,旨在帮助软件开发者和测试人员高效地进行软件测试和质量保证。 该工具支持对软件进行黑盒测试和白盒测试,能够根据规约对系统进行自动化测试。规约测试方法是软件测试应用最广泛的一种方法,意在验证软件是否符合既定的规约要求,主要包括功能规约、性能规约、安全规约等多个方面。 规约测试工具V3.33可以自动生成测试用例,大大节省了测试人员的时间和精力。与传统手动测试相比,规约测试工具V3.33能够提高测试效率,同时减少测试漏洞和测试负担。该工具还可以进行测试统计分析,为软件开发者提供了准确的测试报告和性能评估。 此外,规约测试工具V3.33还提供了友好的界面和易用的操作,可以方便地将测试结果导出到Excel或HTML文件,用户可以根据自己的需求进行编辑和修改。 总的来说,规约测试工具V3.33是一款功能强大,操作简单的自动化测试工具,能够有效帮助软件开发者和测试人员提高软件质量和测试效率。 ### 回答2: 规约测试工具v3.33是一款用于软件测试的工具,它主要用来测试软件的正确性和符合性。这个工具可以被广泛地应用到软件开发的各个阶段,能够帮助软件开发人员快速地发现并修复软件的缺陷,提高软件的质量和可靠性。 规约测试工具v3.33的主要功能包括规约检查、白盒测试、黑盒测试和状态转换测试等。其规约检查是这个工具的核心功能,它可以对软件的规约条件进行分析和检查,发现是否存在不符合规约的情况。白盒测试和黑盒测试则是用来进一步测试软件的正确性和符合性的,可以模拟各种不同的场景和情况进行测试。状态转换测试则是对软件的状态转换进行检查,确保软件的状态转换符合规约。 规约测试工具v3.33具有操作简单、使用方便、测试结果准确等优点。而且,它具有高度可自定义性,可以根据具体的测试需求进行配置。另外,规约测试工具v3.33的测试结果也非常易于理解和解释,能够帮助软件开发人员快速地发现和修复软件的缺陷。 综上所述,规约测试工具v3.33是一款功能强大、使用方便、可自定义性强的软件测试工具,它能够帮助软件开发人员快速地发现问题,提高软件的质量和可靠性。 ### 回答3: 规约测试是软件测试的一种,是指在对一个软件系统进行黑盒测试时,根据系统的正式规约(包括需求规约、设计规约等)来设计和执行测试用例的过程。规约测试可以让测试人员更加准确地理解系统的需求和设计,从而更加有效地发现和修复缺陷。 规约测试工具v3.33是一种帮助测试人员进行规约测试的工具,它的特点包括: 1. 支持多种规约格式:v3.33可以支持不同的规约格式,包括自然语言、状态图、Petri网等,让测试人员可以选择最适合自己的规约格式来进行测试。 2. 自动化测试用例生成:v3.33可以根据规约自动生成测试用例,大大减轻测试人员的负担,提高测试效率。 3. 可视化测试报告:v3.33可以生成可视化的测试报告,让测试人员清晰地了解测试的结果和缺陷情况。 4. 集成化测试管理:v3.33可以与一些测试管理工具集成,如Jira、HP Quality Center等,方便测试人员进行测试计划和缺陷跟踪等工作。 总之,规约测试工具v3.33是一种功能强大、灵活、易用的工具,能够帮助测试人员更加高效地进行规约测试,缩短测试时间,提高测试质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值