지금 담당하는 프로젝트에서 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);
}
}
}