본문 바로가기

JAVA

ToStringBuilder 에서 null 값 제외하기

지금 담당하는 프로젝트에서 AOP 로 각 메소드의 인/아웃 정보를 출력하는 코드가 있다. 
public 으로 된 모든 메소드에 대해 인/아웃 정보를 출력하기 때문에, 
서비스의 호출이 많아 질수록 로그도 급격히 늘어 나는 구조다. 

여러 이유로 인/아웃 정보를 포기 할 수 없는 상황에서 null 인 값은 찍지 않아도 된다는 확답을 받아, 
아래의 코드를 사용하여 null 인 데이터는 제외하도록 처리 했다. 

log.info("[ARGS] {} ", ToStringBuilder.reflectionToString(args, NotNullToStringStyle.NOT_NULL_STYLE));


class NotNullToStringStyle extends ToStringStyle {
    public static final ToStringStyle NOT_NULL_STYLE = new NotNullToStringStyle();

    NotNullToStringStyle() {
        super();
        this.setContentStart("[");
        this.setFieldSeparator(", ");
        this.setContentEnd("]");
    }

    private Object readResolve() {
        return NOT_NULL_STYLE;
    }

    @Override
    public void append(StringBuffer buffer, String fieldName, Object value, Boolean fullDetail) {
        if (value != null) {
            appendFieldStart(buffer, fieldName);
            appendInternal(buffer, fieldName, value, isFullDetail(fullDetail));
            appendFieldEnd(buffer, fieldName);
        }
    }
}