瀏覽代碼

优化注释

zhouhao 8 年之前
父節點
當前提交
d59b76382f

+ 25 - 5
hsweb-logging/hsweb-access-logging-aop/src/main/java/org/hswebframework/web/loggin/aop/AopAccessLoggerSupport.java

@@ -14,11 +14,14 @@ import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Stream;
 
 /**
- * TODO 完成注释
+ * 使用AOP记录访问日志,并触发{@link AccessLoggerListener#onLogger(AccessLoggerInfo)}
  *
  * @author zhouhao
+ * @since 3.0
  */
 public class AopAccessLoggerSupport extends StaticMethodMatcherPointcutAdvisor {
 
@@ -42,6 +45,7 @@ public class AopAccessLoggerSupport extends StaticMethodMatcherPointcutAdvisor {
                 info.setException(e);
                 throw e;
             } finally {
+                //触发监听
                 listeners.forEach(listener -> listener.onLogger(info));
             }
             return response;
@@ -52,9 +56,23 @@ public class AopAccessLoggerSupport extends StaticMethodMatcherPointcutAdvisor {
         AccessLoggerInfo info = new AccessLoggerInfo();
         info.setRequestTime(System.currentTimeMillis());
 
-        AccessLogger ann = holder.findAnnotation(AccessLogger.class);
-        info.setAction(ann.value());
-        info.setDescribe(String.join("\n", ann.describe()));
+        AccessLogger methodAnn = holder.findMethodAnnotation(AccessLogger.class);
+        AccessLogger classAnn = holder.findClassAnnotation(AccessLogger.class);
+
+        String action = Stream.of(classAnn, methodAnn)
+                .filter(Objects::nonNull)
+                .map(AccessLogger::value)
+                .reduce((c, m) -> c.concat("-").concat(m))
+                .orElse("");
+        String describe = Stream.of(classAnn, methodAnn)
+                .filter(Objects::nonNull)
+                .map(AccessLogger::describe)
+                .flatMap(Stream::of)
+                .reduce((c, s) -> c.concat("\n").concat(s))
+                .orElse("");
+
+        info.setAction(action);
+        info.setDescribe(describe);
         info.setParameters(holder.getArgs());
         info.setTarget(holder.getTarget().getClass());
         info.setMethod(holder.getMethod());
@@ -77,6 +95,8 @@ public class AopAccessLoggerSupport extends StaticMethodMatcherPointcutAdvisor {
 
     @Override
     public boolean matches(Method method, Class<?> aClass) {
-        return null != AopUtils.findAnnotation(aClass, method, AccessLogger.class);
+        AccessLogger ann = AopUtils.findAnnotation(aClass, method, AccessLogger.class);
+        //注解了并且未取消
+        return null != ann && !ann.ignore();
     }
 }

+ 5 - 1
hsweb-logging/hsweb-access-logging-aop/src/main/java/org/hswebframework/web/loggin/aop/AopAccessLoggerSupportAutoConfiguration.java

@@ -5,14 +5,18 @@ import org.hswebframework.web.logging.AccessLoggerListener;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 /**
- * TODO 完成注释
+ * AOP 访问日志记录自动配置
  *
  * @author zhouhao
+ * @see org.hswebframework.web.logging.AccessLogger
+ * @see AopAccessLoggerSupport
  */
+@ConditionalOnClass(AccessLoggerListener.class)
 @Configuration
 public class AopAccessLoggerSupportAutoConfiguration {
 

+ 7 - 0
hsweb-logging/hsweb-access-logging-aop/src/main/java/org/hswebframework/web/loggin/aop/EnableAccessLogger.java

@@ -22,6 +22,13 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
 
 import java.lang.annotation.*;
 
+/**
+ * 启用访问日志
+ *
+ * @see AopAccessLoggerSupportAutoConfiguration
+ * @see org.hswebframework.web.logging.AccessLoggerListener
+ * @since 3.0
+ */
 @Target({ElementType.TYPE, ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented

+ 17 - 0
hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/AccessLogger.java

@@ -20,12 +20,29 @@ package org.hswebframework.web.logging;
 
 import java.lang.annotation.*;
 
+/**
+ * 访问日志,在类或者方法上注解此类,将对方法进行访问日志记录
+ */
 @Target({ElementType.TYPE, ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
 public @interface AccessLogger {
+
+    /**
+     * @return 对类或方法的简单说明
+     * @see AccessLoggerInfo#getAction()
+     */
     String value();
 
+    /**
+     * @return 对类或方法的详细描述
+     * @see AccessLoggerInfo#getDescribe()
+     */
     String[] describe() default "";
+
+    /**
+     * @return 是否取消日志记录, 如果不想记录某些方法或者类, 设置为true即可
+     */
+    boolean ignore() default false;
 }

+ 49 - 1
hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/AccessLoggerInfo.java

@@ -5,36 +5,84 @@ import java.lang.reflect.Method;
 import java.util.Map;
 
 /**
- * TODO 完成注释
+ * 访问日志信息
  *
  * @author zhouhao
+ * @since 3.0
  */
 public class AccessLoggerInfo implements Serializable {
 
+    /**
+     * 访问的操作
+     *
+     * @see AccessLogger#value()
+     */
     private String action;
 
+    /**
+     * 描述
+     *
+     * @see AccessLogger#describe()
+     */
     private String describe;
 
+    /**
+     * 访问对应的java方法
+     */
     private Method method;
 
+    /**
+     * 访问对应的java类
+     */
     private Class target;
 
+    /**
+     * 请求的参数,参数为java方法的参数而不是http参数,key为参数名,value为参数值.
+     */
     private Map<String, Object> parameters;
 
+    /**
+     * 请求者ip地址
+     */
     private String ip;
 
+    /**
+     * 请求的url地址
+     */
     private String url;
 
+    /**
+     * http 请求头集合
+     */
     private Map<String, String> httpHeaders;
 
+    /**
+     * http 请求方法, GET,POST...
+     */
     private String httpMethod;
 
+    /**
+     * 响应结果,方法的返回值
+     */
     private Object response;
 
+    /**
+     * 请求时间戳
+     *
+     * @see System#currentTimeMillis()
+     */
     private long requestTime;
 
+    /**
+     * 响应时间戳
+     *
+     * @see System#currentTimeMillis()
+     */
     private long responseTime;
 
+    /**
+     * 异常信息,请求对应方法抛出的异常
+     */
     private Throwable exception;
 
 

+ 8 - 1
hsweb-logging/hsweb-access-logging-api/src/main/java/org/hswebframework/web/logging/AccessLoggerListener.java

@@ -1,10 +1,17 @@
 package org.hswebframework.web.logging;
 
 /**
- * TODO 完成注释
+ * 访问日志监听器,实现此接口并注入到spring容器即可获取访问日志信息
  *
  * @author zhouhao
+ * @since 3.0
  */
 public interface AccessLoggerListener {
+
+    /**
+     * 当产生访问日志时,将调用此方法.注意,此方法内的操作应尽量设置为异步操作,否则可能影响请求性能
+     *
+     * @param loggerInfo 产生的日志信息
+     */
     void onLogger(AccessLoggerInfo loggerInfo);
 }