日志、java日志管理--logback、日志脱敏处理

引用参考:
【splunk】
--Splunk—云计算&大数据时代的超级日志分析和监控利器
https://blog.csdn.net/enweitech/article/details/51330610

【log4j】
--Log4j日志在java项目中的使用(附工程源码)
https://blog.csdn.net/wushiwude/article/details/54312319
--java web项目中加入log4j
https://blog.csdn.net/whh743/article/details/53584666
--log4j的使用与java中properties配置文件加载
https://blog.csdn.net/u013516035/article/details/41686627



import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log logger = LogFactory.getLog(HomeController.class);
或
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
打印日志方式1:
import java.text.MessageFormat;
logger.info(MessageFormat.format(logStr+"token={0},url={1},servletPath={2}.",token,request.getRequestURI(),request.getServletPath()));

打印日志方式2:
logger.info(String.format("打印日志%s,%s", ss,dd));

打印日志方式3:
 logger.info("interface A001 token= {}", token);


【SLF4J与Logback简介】
--org.slf4j.Logger
-- 如何启用设置org.slf4j.Logger打印并输出日志
https://blog.csdn.net/qq_26115733/article/details/70560934
//
SLF4J——Simple Logging Facade For Java
它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有java.util.logging,
log4j,
logback,
commons-logging,
Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。
//
Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。
【日志脱敏处理】
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.ValueFilter;
/**
 * 字段脱敏处理
 *
 */
public class Demo {
	public static Logger logger = Logger.getLogger(Demo.class);
	private static ValueFilterExtend valueFilterExtend;
	static{
		//需要脱敏的参照规则
		String referenceJsonStr = "{\"4,4\":[\"bankCard\",\"idntityCard\"],\"3,5\":[\"mobile\"],\"4,0\":[\"email\"]}";
		Map<String, Map<String, Integer>> initReferenceMap = new HashMap<>();//初始化后的参照物map
		JSONObject jsonObject = JSON.parseObject(referenceJsonStr);
		String preffixSuffixStr = null;
		String[] preffixSuffixArray = null;//数组
		Map<String, Integer> tempReferenceMap = null;//参照物map
		//遍历参照物json对象
		for (Entry<String, Object> entry : jsonObject.entrySet()) {
			preffixSuffixStr = entry.getKey();
			preffixSuffixArray = preffixSuffixStr.split(",");
			tempReferenceMap = new HashMap<String, Integer>();
			tempReferenceMap.put("preffix", Integer.valueOf(preffixSuffixArray[0]));
			tempReferenceMap.put("suffix", Integer.valueOf(preffixSuffixArray[1]));
			for (Object v : (JSONArray)entry.getValue()){
				initReferenceMap.put(String.valueOf(v), tempReferenceMap);
			}
		}
		System.out.println("输出initReferenceMap.size()="+initReferenceMap.size());
		if(initReferenceMap.size() > 0){
			valueFilterExtend = new ValueFilterExtend(initReferenceMap);
		}
	}
	
	public static void main(String[] args) {
		JSONObject jsonObject=new JSONObject();
		jsonObject.put("bankCard", "32343413412341234234");
		jsonObject.put("mobile", "18799998888");
		//判断参照物是否存在
		Boolean bool=valueFilterExtend.isReferenceObjectMapEmpty();
		System.out.println("输出bool="+bool);
		if(bool){
			String str=JSON.toJSONString(jsonObject,valueFilterExtend);//特定属性脱敏处理
			System.out.println("输出str="+str);
		}
	}
	/**
	 * 
	 * 内部类ValueFilterExtend,实现了com.alibaba.fastjson.serializer.ValueFilter接口
	 */
	static class ValueFilterExtend implements ValueFilter {
		Map<String,Map<String, Integer>> referenceMap = new HashMap<>();
		public ValueFilterExtend() {
			
		}
		ValueFilterExtend(Map<String,Map<String, Integer>> referenceMap) {
			this.referenceMap = referenceMap;
		}
		/**
		 * 判断参照物map是否为空
		 * @return
		 */
		public boolean isReferenceObjectMapEmpty(){
			return referenceMap != null && referenceMap.size() != 0;
		}
		/**
		 * 重写ValueFilter接口方法process()
		 */
		@Override
		public Object process(Object targetObject, String name, Object value) {
			System.out.println("调用process方法...targetObject="+targetObject.toString());
			String val = String.valueOf(value);
			Map<String, Integer> map = referenceMap.get(name);
			return StringUtil.dealString(val, map.get("preffix"), map.get("suffix"), '*');//对字段的前几位和后几位进行脱敏处理
		}
	}
}


猜你喜欢

转载自franciswmf.iteye.com/blog/2327230