똑같은 쿼리 로그로 콘솔만 길어지는게, 보기 불편해서 sqlonly만 띄우도록 설정했다.
일단, sqltiming 부터 콘솔에 띄우지 않도록 하기 위해 해당 로그의 클래스를 파악해야했다.
로그 관련 클래스를 만들어서 로깅이벤트 네임을 출력해보고, 일단 당장 모든 로그를 허용하도록 리턴해준다.
package rootPackage.log;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
public class LogbackFilter extends Filter<ILoggingEvent>{
@Override
public FilterReply decide(ILoggingEvent e){
System.out.println(e.getLoggerName());
return FilterReply.ACCEPT;
}
}
그리고 해당 필터를 로깅 전에 실행하도록 logback.xml
파일 내 태그를 추가해준다.
<!-- Appenders -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="rootPackage.log.LogbackFilter"/>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%boldCyan(API) %boldYellow(%-5level) %green(%d{yyyy-MM-dd HH:mm:ss}) %boldMagenta([%logger{0}:%line]) %msg%n</pattern>
</encoder>
</appender>
이제 로그 위에 jdbc.sqlonly와 같이 클래스명이 뜬다. 비활성화하고 싶은 로그의 클래스명을 logback.xml
내 아래와 같이 추가한다. 중요한 것은 level을 OFF
로 해주어야 출력되지 않는다.
<logger level="OFF" appender-ref="console" name="jdbc.sqltiming"/>
이 때 appender-ref
속성은 <appender>
태그의 name
속성과 같이 맞춰주면 된다. 다 끝나면 로그를 출력할 때마다 클래스명을 출력할 수 없으니 이제 <filter>
태그를 logback.xml
파일내에서 제거한다.
최종 완료 된 모습으로, 쿼리 로그는 한 번만 출력된다.