yangfuhai / jboot

一个优雅的微服务框架,SpringCloud 之外的另一个选择,已经使用在用户量过亿的商业产品上,有超过1000家公司在使用Jboot做极速开发...

Home Page:http://www.jboot.com.cn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关闭Paras和Sql指令输出

hykilpikonna opened this issue · comments

image
这个Paras和SQL指令输出超级刷屏哇...
在哪里关呢w?

通过过滤系统输出实现了...
但是这样性能太差了!
毕竟这样每次系统输出的时候都要吧所有想要禁用的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