屏蔽freemarker打印堆棧信息和模板調試時打印堆棧信息到頁面

今天看着我們公司之前網站所使用的freemarker模板的時候難免會存在很多語法錯誤,比如轉時間,對象爲空然後調用對象的屬性,在我們控制檯就會打印一些堆棧錯誤,如果網站正式運行了,那麼我們的日誌裏保存的日誌大部分都是freemarker堆棧錯誤,這個在不需要調試頁面的時候是很佔資源的,後來我就想我必須要把這個堆棧信息給屏蔽了(我有強迫症)。

在百度搜索了一圈基本上搜索到的都是有關freemarker怎麼使用自定義模板異常相關內容(差不多都是TemplateExceptionHandler的使用方式相關的東西),沒辦法網上找不到,就只有直接找了

查找源碼發現org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer配置中的freemarkerSettings增加如下配置

<!-- 關閉freemarker打印堆棧信息 -->
<prop key="log_template_exceptions">false</prop>
加了配置後,後臺就不會在打印堆棧信息了

還有就是在開發freemarker模板的時候,前端人員需要使用標籤進行獲取數據,這個時候我們其實有需要把堆棧信息 (包含業務邏輯層拋出的自定義異常)展示給前端人員看,那麼我們需要調整配置如下

<!-- 異常處理freemarker.core.Configurable類中的setSetting方法選項有debug,html_debug,ignore,rethrow,default-->
<prop key="template_exception_handler">html_debug</prop>

debug:該模式會將TemplateException的堆棧信息打印到頁面但是不是很友好,沒有良好的格式

html_debug:該模式將堆棧信息以html的形式打印到頁面上

ignore:該模式不會做任何事,異常該往上層拋就拋

rethrow:該模式會將TemplateException再次拋出

default:該模式和debug模式一樣都是同一個異常處理實現

好了總結一下:

template_exception_handler配置只有ignore,rethrow模式不會打印堆棧到前臺,其餘3個模式都會打印堆棧信息到前臺

我把我的配置完整的放在這兒,知道有些兄弟想偷懶

<bean id="freemarkerConfig"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" scope="singleton" >
<property name="templateLoaderPath" value="/WEB-INF/view" />
<property name="freemarkerSettings">
			<props>
                <prop key="tag_syntax">auto_detect</prop>
                <prop key="template_update_delay">0</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="number_format">0.##</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="classic_compatible">true</prop>
                <prop key="template_exception_handler">ignore</prop>
                <prop key="log_template_exceptions">false</prop>
            </props>
</property>
</bean>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章