zoukankan      html  css  js  c++  java
  • spring boot的gradle整合日志

    1.引入包
    configurations {
    providedRuntime
    // remove default logger
    all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-redis')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-freemarker')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-web-services')
    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
    compile('org.springframework.boot:spring-boot-starter-log4j2:2.0.3.RELEASE')
    compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
    compileOnly('org.projectlombok:lombok')
    runtime('mysql:mysql-connector-java')
    compile ('com.alibaba:fastjson:1.2.47')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    }


    2.在路径rescourse下配置log4j2.properties

    name = PropertiesConfig
    #property.filename = target/logs
    property.filename = D:\log

    #appenders = console, file
    #配置值是appender的类型,并不是具体appender实例的name
    appenders = rolling

    appender.rolling.type = RollingFile
    appender.rolling.name = RollingLogFile
    appender.rolling.fileName=${filename}/automationlogs.log
    appender.rolling.filePattern = ${filename}/automationlogs-%d{MM-dd-yy-HH-mm-ss}-%i.log
    appender.rolling.layout.type = PatternLayout
    appender.rolling.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
    appender.rolling.policies.type = Policies
    appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
    appender.rolling.policies.size.size=100MB
    appender.rolling.strategy.type = DefaultRolloverStrategy
    appender.rolling.strategy.max = 5

    rootLogger.level = trace
    rootLogger.appenderRef.rolling.ref = RollingLogFile

    #rootLogger.appenderRef.rolling.ref = rolling

    3.java ,其中@Slf4j注解相当于声明变量,可以直接使用log.info()

    @WebFilter(filterName = "RequestLog", urlPatterns = "/*")
    @SpringBootApplication
    //重点
    @ServletComponentScan
    public class DemoApplication {启动类}
    这两个注解相当于配置过滤器
    /*
    * Project: somp.cusma
    *
    * File Created at 20171117
    *
    * Copyright 2016 CMCC Corporation Limited.
    * All rights reserved.
    *
    * This software is the confidential and proprietary information of
    * ZYHY Company. ("Confidential Information"). You shall not
    * disclose such Confidential Information and shall use it only in
    * accordance with the terms of the license.
    */
    package com.sunreal.demo.recordcore.domain.login.filter;


    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;

    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    import java.util.Enumeration;



    /**
    * @Type RequestLog.java
    * @Desc
    * @version
    */
    @Component("requestLog")
    //重点
    @WebFilter(filterName = "RequestLog", urlPatterns = "/*")
    @Slf4j
    public class RequestLog implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
    FilterChain filterChain)
    throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;

    log.info("<=========================== Request Url ===========================>");

    log.info(request.getRequestURL().toString());

    log.info("<========================= Header Attribute ========================>");
    Enumeration<?> e = request.getHeaderNames();
    while (e.hasMoreElements()) {
    String name = (String) e.nextElement();
    String value = request.getHeader(name);
    log.info(name + " = " + value);
    }
    log.info("<========================= Header Attribute ========================>");

    String queryString = request.getQueryString();
    if(!StringUtils.isEmpty(queryString)){
    log.info("<========================= Get String ========================>");
    log.info(queryString);
    }

    log.info("<========================= Request Param ===========================>");
    Enumeration<?> eq = request.getParameterNames();
    while (eq.hasMoreElements()) {
    String name = (String) eq.nextElement();
    String value = request.getParameter(name);
    log.info(name + " = " + value);
    }
    log.info("<========================= Request Param ===========================>");

    filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {

    }

    }

    /**
    * Revision history
    * -------------------------------------------------------------------------
    *
    * Date Author Note
    * -------------------------------------------------------------------------
    */
    上述是日志的配置情况,
    下面介绍aop切入日志的的方法
    @Target({ ElementType.PARAMETER, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SystemControllerLog {

    String description() default "";

    }
    @RequestMapping(value = "/htgl/addNewRecruitment", method = RequestMethod.POST)
    @SystemControllerLog(description="登出")
    public SunrealResult addNewRecruitment(@RequestBody RecruitmentInformation recruitmentInformation) {
    System.out.println("进入Sysmaintain--provider--addNewRecruitment");
    try {
    return recruitmentInformationService.addNewRecruitment(recruitmentInformation);
    } catch (Exception e) {
    e.printStackTrace();
    return SunrealResultUtil.error(-1, "接口服务异常,请重新尝试!");
    }
    }
    @Component //交予容器管理
    @Aspect //代理
    public class LoggerBefore {
    /**
    * Logger for this class
    */
    private static final Logger logger = Logger.getLogger(LoggerBefore.class);

    /**
    * OperateLogService
    */
    @Autowired
    private SysuserOperatehistoryMapper logService;


    @Pointcut("@annotation(com.sunreal.sysmaintain_provider.util.SystemControllerLog)")
    public void controllerAspect() {

    }

    @SuppressWarnings("rawtypes")
    public static String getControllerMethodDescription(JoinPoint joinPoint) throws Exception {
    String targetName = joinPoint.getTarget().getClass().getName();
    String methodName = joinPoint.getSignature().getName();
    Object[] arguments = joinPoint.getArgs();
    Class targetClass = Class.forName(targetName);
    Method[] methods = targetClass.getMethods();
    String description = "";
    for (Method method : methods) {
    if (method.getName().equals(methodName)) {
    Class[] clazzs = method.getParameterTypes();
    if (clazzs.length == arguments.length) {
    description = method.getAnnotation(SystemControllerLog.class).description();
    break;
    }
    }
    }
    return description;
    }

    /**
    * @param
    * @throws Throwable
    */
    @After("controllerAspect()")
    public void before(JoinPoint joinPoint) throws Throwable {
    // EnterpriseOperator curUser = null;
    // String userIp = null;
    // String sessionId = null;
    String clazzName = joinPoint.getTarget().getClass().getName();
    String methodName = joinPoint.getSignature().getName();
    Object[] objects = joinPoint.getArgs();
    Class targetClass = Class.forName(clazzName);
    Method[] methods = targetClass.getMethods();
    String description = "";
    for (Method method : methods) {
    if (method.getName().equals(methodName)) {
    Class[] clazzs = method.getParameterTypes();
    if (clazzs.length == objects.length) {
    description = method.getAnnotation(SystemControllerLog.class).description();
    break;
    }
    }
    }
    logger.info("clazzName=" + clazzName + ",method=" + methodName + ",args=" + objects);
    // Subject subject = SecurityUtils.getSubject();
    // userIp=subject.getSession().getHost();
    // sessionId=subject.getSession().getId().toString();
    // Object user = subject.getPrincipal();
    // logger.info(user);
    // if (user instanceof EnterpriseOperator) {
    // curUser = (EnterpriseOperator) user;
    // OperateLog log = new OperateLog();
    // log.setUserId(String.valueOf(curUser.getId()));
    // log.setUserName(curUser.getUsername());
    // log.setOperateTime(new Date());
    // log.setClassName(clazzName);
    // log.setOperateMethod(methodName);
    // log.setUserIp(userIp);
    // log.setSessionId(sessionId);
    // log.setOperateCnName(description);
    // logService.addLog(log);
    // }
    Operateinfo operateinfo = new Operateinfo();
    operateinfo.setOperatedate(new Date());
    operateinfo.setOperateuserid(12212321);
    operateinfo.setOperatedetail(methodName);
    long logId = new IdWorker(1,1).nextId();
    operateinfo.setOperateId(logId);
    logService.insertLog(operateinfo);
    }
    }







    @SpringBootApplication
    //重点
    @ServletComponentScan
    public class DemoApplication {
  • 相关阅读:
    这段时间的总结以及未来一个月的计划
    通过配置文件构建XML
    利用汇编实现表驱动
    Intel汇编语言程序设计课后习题,6.5.5
    盲目地相信网上评价未必是好事
    ObjectiveC基础语法复习笔记
    IOS6.0 学习第1篇,基础的IOs框架
    IOS6.0 学习第2篇,弹出AlertView
    Android Fragment的使用(1)
    ObjecteiveC 属性修饰符
  • 原文地址:https://www.cnblogs.com/gyadmin/p/9198259.html
Copyright © 2011-2022 走看看