beetl错误处理类

beetl错误处理类

在使用beetl中如果${searchKey!}如果遗漏了"!"错误会在控制台输出、而没有记录到日志提醒中。一次线上环境出错没有及时拦截到错误记录被boss大吵、特此记录一下。经常出现的错误提醒是:>>04:18:20:变量未定义(VAR_NOT_DEFINED):searchKey1 位于6行 资源:/xxx/search.html

1.官网提供的说明及解决方案

参考官网网址:beetl官网说明 其实官网说的已经非常清晰和全面了只是我们需要把它记录到日志文件中方便报警、提醒。

2. 自定义类方便系统记录错误日志

类定义如下:

public class ReThrowConsoleErrorHandler extends ConsoleErrorHandler {

    private static Logger LOG = LoggerFactory.getLogger(ReThrowConsoleErrorHandler.class);

    @Override
    public void processExcption(BeetlException ex, Writer writer) {
    	super.processExcption(ex, writer);//控制台输出
        LOG.info("enter beetl 异常处理 开始 。。。。。。。。。");
        ErrorInfo error = new ErrorInfo(ex);
        StringBuilder sb = new StringBuilder(">>").append(this.getDateTime()).append(":");
        sb.append(error.getType());
        sb.append(":");
        sb.append(error.getErrorTokenText());
        sb.append("位于");
        sb.append(error.getErrorTokenLine());
        sb.append("行资源:");
        sb.append(getResourceName(ex.resourceId));
        sb.append("\n");

        String content = null;
        ResourceLoader resLoader = ex.gt.getResourceLoader();
        try {
            Resource res = resLoader.getResource(ex.resourceId);
            int[] range = this.getRange(error.getErrorTokenLine());
            content = res.getContent(range[0], range[1]);
            if (content != null) {
                String[] strs = content.split(ex.cr);
                int lineNumber = range[0];
                for (int i = 0; i < strs.length; i++) {
                    sb.append(lineNumber);
                    sb.append("|");
                    sb.append(strs[i]);
                    sb.append("\n");
                    lineNumber++;
                }

            }
        } catch (IOException e) {
            LOG.error("beetl ioException :", e);
        }
        LOG.error(sb.toString());
        LOG.info("enter beetl 异常处理显示结束 。。。。。。。。。");
    }

}

3. 修改 beetl.properties

默认的配置如下:

ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler

修改后的配置如下:

ERROR_HANDLER = com.xxx.web.view.beetl.error.ReThrowConsoleErrorHandler

4. 重启服务测试是否生效

重启项目验证

5.注意事项

此处错误提醒已经返回到视图层如果想通过Spring MVC或者Struts2等拦截异常日志是拦截不到的。 比如spring mvc中使用:org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver类的子类是捕获不到异常信息的。而定义拦截器中可以获得如下图: 拦截器异常提醒 另外通过前台浏览器查看返回的html代码如下截图: 页面渲染html

转载于:https://my.oschina.net/zzuqiang/blog/719121

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值