Closed hykilpikonna closed 6 years ago
通过过滤系统输出实现了... 但是这样性能太差了! 毕竟这样每次系统输出的时候都要吧所有想要禁用的ST判断一遍(:з」∠) 有没有官方的开关哇...
private static SystemOutFilter systemOutFilter = null;
public static void enableSystemOutFilter()
{
if (systemOutFilter != null) return;
System.setOut(systemOutFilter = new SystemOutFilter(System.out));
}
/**
* 关闭Jboot的SQL指令信息报告
*/
public static void disableSqlReport()
{
enableSystemOutFilter();
systemOutFilter.getDisabledStackTraces().add("com.jfinal.plugin.activerecord.SqlReporter.invoke:56");
}
/**
* 系统输出过滤,
* 用来防止Jboot输出Sql指令信息刷屏什么的_(:з」∠)_
*/
public static class SystemOutFilter extends PrintStream
{
@Getter
private ArrayList<String> disabledStackTraces = new ArrayList<>();
private SystemOutFilter(OutputStream out)
{
super(out);
}
/**
* 过滤StackTrace
* @return 是否通过过滤
*/
private boolean verify()
{
StackTraceElement stackTrace = Thread.currentThread().getStackTrace()[3];
String stClass = stackTrace.getClassName();
String stMethod = stackTrace.getMethodName();
String stLine = stackTrace.getLineNumber() + "";
String stFull = stClass + "." + stMethod + ":" + stLine;
for (String disabledStackTrace : disabledStackTraces)
if (disabledStackTrace.equals(stFull)) return false;
return true;
}
@Override
public void println(String s)
{
if (verify()) super.println(s);
}
}
配置 jboot.mode = product 就自动关闭了,这个输出只是在debug模式下才会输出。默认情况下是debug
这个Paras和SQL指令输出超级刷屏哇... 在哪里关呢w?