Log Mask

来源:互联网 发布:csol大刀控制台优化吧 编辑:程序博客网 时间:2024/05/22 15:56
public class MaskedReflectionToStringBuilder extends ReflectionToStringBuilder {
    @Override
    protected Object getValue(Field field) throws IllegalArgumentException, IllegalAccessException {
        Object value = super.getValue(field);


        do{
            // output null field by default
            if(value == null) break;
            
            LogIgnore ignore = field.getAnnotation(LogIgnore.class);
            if(ignore != null){
                value = "<ignored>";
                break;
            }
            
            LogMask ann = field.getAnnotation(LogMask.class);
            if(ann == null) break;
            
            if(LogUtils.isSimpleType(value.getClass())){
                // simple type mask as string
                if(ann.value() == LogMaskType.SimpleMask){
                    value = LogUtils.markString(String.valueOf(value), ann.value().getMask());
                }else{
                    value = LogUtils.markFullString(String.valueOf(value), ann.value().getMask());
                }
            }else{
                // complex type marked as hash code
                value = String.valueOf(value.hashCode());
            }
        }while(false);


        return value;
    }

}

--------------------------------------------------------分割线--------------------------------------------------------

public final class LogUtils {
    public static char MARK_CHAR = '_';


    private final static Set<Class<?>> SIMPLE_TYPES = new HashSet<Class<?>>();


    static {
        SIMPLE_TYPES.add(Boolean.class);
        SIMPLE_TYPES.add(Character.class);
        SIMPLE_TYPES.add(Byte.class);
        SIMPLE_TYPES.add(Short.class);
        SIMPLE_TYPES.add(Integer.class);
        SIMPLE_TYPES.add(Long.class);
        SIMPLE_TYPES.add(Float.class);
        SIMPLE_TYPES.add(Double.class);
        SIMPLE_TYPES.add(String.class);
    }


    private LogUtils() {
    }


    public static boolean isSimpleType(Class<?> cls) {
        return SIMPLE_TYPES.contains(cls) || cls.isEnum();
    }


    public static String markFullString(String str, char mask) {
        return str != null ? StringUtils.repeat(String.valueOf(mask), str.length()) : str;
    }


    public static String markString(String ac) {
        return markString(ac, MARK_CHAR);
    }


    public static String markString(String ac, char delim) {
        char mask = delim;
        if (StringUtils.isBlank(ac)) {
            return StringUtils.EMPTY;
        }


        char[] acChars = ac.toCharArray();
        char latestChar = acChars[acChars.length - 1];


        if (acChars.length == 1) {
            return String.valueOf(mask);
        } else if (acChars.length == 2) {
            return String.valueOf(new char[] { acChars[0], mask });
        } else if (acChars.length == 3) {
            return String.valueOf(new char[] { acChars[0], mask, acChars[2] });
        } else {
            int countor = 2;
            boolean completed = false;
            while (!completed) {
                acChars[countor] = mask;
                acChars[countor + 1] = mask;
                countor = countor + 3;
                if (countor + 1 >= acChars.length) {
                    completed = true;
                }
            }


            if (acChars[acChars.length - 1] == mask) {
                acChars[acChars.length - 1] = latestChar;
            }


            return String.valueOf(acChars);
        }
    }
}

0 0
原创粉丝点击