JAvaバックグラウンドの注釈式ログ、注釈を利用してログを記録する

2463 ワード

ログ記録は簡略化され,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  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 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 descFormat(String desc){
		List 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でコードを適切に変更する必要があります.良いアドバイスや分からないところがあればコメントを歓迎します!