背景
业务通过Base64字串传输图片,这对日志记录的影响很大。
暂不说浪费大量空间,自己看日志的时候也很折磨。
问题是携带Base64字串的JSON里面还有业务数据,不能一刀切直接不记录。
正则
正经的正则为
/* 说明:以引号开始,只包含字母数字或+-=的一串字,长度超过1024,最小匹配,以引号结束 */
public static final String PATTERN = "\"[\\w+-=]{1024,}?\"";
如果该base64中可能存在 \r \n 标识,而你在记录日志之后的业务才过滤这些内容
则可以将正则补充为如下
/* 说明: 在之前[字母数字+-=]的基础上遇到\符号也不会停止匹配 */
public static final String PATTERN = "\"[\\w+-=\\\\]{1024,}?\"";
使用方式
public static final String PATTERN = "\"[\\w+-=]{1024,}?\"";
public static final String REPLACE = "\"very long (more than 1024)\"";
//......
"记录日志的字符串".replaceAll(PATTERN, REPLACE)
注意,匹配的内容是
“…一千多字长的base64字串…”
如果你需要匹配汉字,那需要对正则中括号内的内容进行修改;
如果你像我一样希望保持JSON的结构,那么别忘了在替换字符串中前后加上双引号。