diff --git a/example-webapp.ipr b/example-webapp.ipr index 1838dc0..b0375d9 100644 --- a/example-webapp.ipr +++ b/example-webapp.ipr @@ -351,6 +351,7 @@ + diff --git a/src/main/example/ftl/HtmlExceptionHandler.java b/src/main/example/ftl/HtmlExceptionHandler.java new file mode 100644 index 0000000..cd27047 --- /dev/null +++ b/src/main/example/ftl/HtmlExceptionHandler.java @@ -0,0 +1,25 @@ +package example.ftl; + +import freemarker.core.Environment; +import freemarker.template.TemplateException; +import freemarker.template.TemplateExceptionHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.Writer; + +public class HtmlExceptionHandler implements TemplateExceptionHandler { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + public void handleTemplateException(TemplateException te, Environment env, Writer out) throws TemplateException { + logger.warn(te.getMessage() + "\n" + te.getFTLInstructionStack()); + try { + out.write("???"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/example/ftl/HtmlFreeMarkerConfigurer.java b/src/main/example/ftl/HtmlFreeMarkerConfigurer.java index 4d52287..13906e2 100644 --- a/src/main/example/ftl/HtmlFreeMarkerConfigurer.java +++ b/src/main/example/ftl/HtmlFreeMarkerConfigurer.java @@ -1,8 +1,12 @@ package example.ftl; import freemarker.cache.TemplateLoader; +import freemarker.log.Logger; +import freemarker.template.Configuration; +import freemarker.template.TemplateException; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; +import java.io.IOException; import java.util.List; public class HtmlFreeMarkerConfigurer extends FreeMarkerConfigurer { @@ -18,4 +22,19 @@ protected void postProcessTemplateLoaders(List templateLoaders) // spring.ftl from classpath will not work with the HtmlTemplateLoader // use /WEB-INF/templates/spring.ftl instead } + + @Override + protected void postProcessConfiguration(Configuration config) throws IOException, TemplateException { + config.setTemplateExceptionHandler(new HtmlExceptionHandler()); + } + + @Override + public void afterPropertiesSet() throws IOException, TemplateException { + try { + Logger.selectLoggerLibrary(Logger.LIBRARY_SLF4J); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + super.afterPropertiesSet(); + } } diff --git a/src/main/logback.xml b/src/main/logback.xml index bf37a21..473f959 100644 --- a/src/main/logback.xml +++ b/src/main/logback.xml @@ -8,6 +8,7 @@ +