java后台注解式日志,利用注解记录日志

来源:互联网 发布:淘宝卖家手机号码采集 编辑:程序博客网 时间:2024/05/22 00:48

日志记录简化,只需要在action或者controller的方法上加logging注解即可。注解:@Logging(description = "{username}登录"),description是注解内容,{}中为动态参数,是传入该方法中的指定po的属性。

注解类代码:

package cn.com.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 日志注解 * @author ZhangShaobo * @date 2017-09-04 */@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Logging {String description();}

具体的日志实现类,该类中loginfo方法需要在拦截器中调用。

package cn.com.util;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.poi.ss.formula.functions.T;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import cn.com.annotation.Logging;/** * 日志注解的具体实现类 * @author ZhangShaobo * @date 2018-09-04 */public class LogAnnoUtil {private static Logger log = LoggerFactory.getLogger(LogAnnoUtil.class);/** * 根据注解记录日志 * @param t action对象 * @param methodName 调用的action方法名称 * @param map 参数map */public static <T> void loginfo(T t, String methodName, Map map){Method [] methods = t.getClass().getDeclaredMethods();    for (final Method m : methods) {    if (m.getName().equals(methodName)) {    if(m.isAnnotationPresent(Logging.class)){    String desc = m.getAnnotation(Logging.class).description();    List<String> list = descFormat(desc);    for (String s : list) {String value = map.get(s).toString();desc = desc.replace("{"+s+"}", value);}    // 暂时只是输出到了控制台,具体需要存库或者存缓存,需要改这段代码    log.info(desc);    }}}}/** * 获取日志信息中的动态参数,然后替换 * @param desc * @return */private static List<String> descFormat(String desc){List<String> list = new ArrayList<>();Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}");         Matcher matcher = pattern.matcher(desc);         while(matcher.find()){             String t = matcher.group(1);             list.add(t);        }return list;}}

拦截器中写调用,以上代码实现的是在struts框架中用注解记录日志,springmvc或者springboot需要适当更改代码。有好的建议或者有不明白的地方欢迎评论沟通!