Spring Boot 의 통합 로그 솔 루 션

4701 단어 Java
로 그 는 전체 시스템 에서 매우 중요 한 일환 으로 JAVA 에 도 로그 프레임 워 크 가 많 습 니 다. 본 고 는 Spring Boot 에서 logback 과 op 을 이용 하여 로 그 를 통일 적 으로 처리 하 는 것 을 실현 하 였 습 니 다.본문 은 비교적 간단 합 니 다. 기 록 된 주 O (∩ ∩) O ~
먼저 resources 디 렉 터 리 에 logback - spring. xml 을 logback 설정 파일 로 새로 만 듭 니 다.



    

    

    

    
    
        
            ${CONSOLE_LOG_PATTERN}
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    

    
    
        ${LOG_HOME}/vcash-order.log
        
            ${LOG_HOME}/vcash-order.%d{yyyy-MM-dd}.log
            
            60
        
        
            %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n
        
    

    
       
           
           
       
    
    
    
        
            
            
        
    

    
        
            
        
    



보 실 수 있 습 니 다. LOG 를 통 해HOME 이 property 는 로그 저장 경 로 를 지정 하여 springProfile 을 통 해 개발, 테스트, 생산 환경 에 대응 하 는 3 가지 서로 다른 환경 을 지정 하 였 으 며, 이 안에 로그 단 계 를 지정 하 였 으 며, 위 에서 정의 한 두 개의 appender 를 참조 하 였 습 니 다.
새 주석 @ Log:
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
}

새 aspect 클래스 를 만 듭 니 다. 이 클래스 에서 로그 기록 을 처리 합 니 다:
@Aspect
@Component
public class VBSAspect {
    private static final Logger log= LoggerFactory.getLogger(VBSAspect.class);

    @Pointcut("@annotation(com.vcash.wechat.annotation.Log)")
    public void logPointcut(){}

    @Around("logPointcut()")
    public Object logHandler(ProceedingJoinPoint process) throws Throwable{
        long startTime=System.currentTimeMillis();
        MethodSignature methodSignature= (MethodSignature) process.getSignature();
        Method method=methodSignature.getMethod();
        String methodName=method.getName();
        String className= method.getDeclaringClass().getName();
        Object[] args=process.getArgs();
        StringBuilder params=new StringBuilder();
        for (int i = 0; i < args.length; i++) {
            params.append(args[i].toString());
            params.append(";");
        }
        Object result= null;
        try {
            result = process.proceed();
        } catch (Throwable throwable) {
            String exception=throwable.getClass()+":"+throwable.getMessage();
            long costTime=System.currentTimeMillis()-startTime;
            log.error("    :{},    :{},    :{},    :{},    :{},    :{}",startTime,costTime,className,methodName,params.toString(),exception);
            return CustomerResponse.buildFail(throwable.getMessage());
        }
        long costTime=System.currentTimeMillis()-beginTime;
        log.info("    :{},    :{},    :{},    :{},    :{},    :{}",startTime,costTime,className,methodName,params.toString(), result);
        return result;
    }
}

이 를 통 해 알 수 있 듯 이 @ Pointcut 에 서 는 @ Log 가 존재 하 는 곳 을 주석 으로 지정 하고 @ Log 는 방법 에 주석 을 달 았 기 때문에 logHandler 방법 에서 @ Log 가 주석 을 달 고 있 는 방법 에 대한 일련의 매개 변 수 를 얻 었 습 니 다. 예 를 들 어 방법 명, 입 참, 출 참, 시간 소모 등 이 매개 변 수 를 특정한 형식 으로 로그 에 기록 합 니 다. 물론 입 니 다.너 도 여기에서 로 그 를 데이터베이스 에 쓸 수 있다.
이상, 전체 시스템 의 로그 처 리 를 완 료 했 습 니 다. 484 는 매우 간단 합 니 다. 더 이상 모든 종류 와 방법 에 로그 코드 를 도입 하지 않 아 도 됩 니 다. 코드 를 결합 하여 유지 하기 편 합 니 다.

좋은 웹페이지 즐겨찾기