Blog

Brad Wood

August 09, 2012

Spread the word


Share your thoughts

 

ColdBox gives you several ways to deal with unhandled exceptions in your application such as the exceptionHandler event and the onException interception point to name a couple.  With either of those approaches, you can redirect the request to a different event.  If you don't redirect or abort the request though, ColdBox will eventually display the contents of your error template.  
 
By default the error template is /coldbox/system/includes/BugReport.cfm.  This file has the familiar "Oops! Exception Encountered" header.  While BugReport.cfm is chock-full of juicy error details (including the SQL of queries that errored), it isn't the kind of information you want to be revealing to the general public.  
 
This is where your customErrorTemplate setting from the ColdBox config file comes in.  Set this to the path of the page you want your users to see when something goes wrong on the site.  
 
settings.customErrorTemplate = "/includes/sorry.cfm";
 
You'll probably want to display a comforting message, a link to your webmaster's E-mail address, or your customer service number.  If you're feeling cheeky, you could try an octocat, or fail whale.  :)  Remember, your custom error template is NOT a view.  It won't be rendered inside your site layout and it won't have access to variables a view normally gets, but it will have an exceptionBean object passed in.  You can go digging for what you need with getController(), but 1be careful-- you don't know what kind of state the framework is in.  If you create an error on this page, it will bubble up to the onError method in your application.cfc.
 
 
P.S. This is an excellent place to use environment overrides to use the default error page on your dev and staging server, but the pretty one on production.  Just set the path to the pretty page in your main settings block, and override it with an empty string (which means use the default) in your lower environment overrides.

Add Your Comment

(1)

Oct 10, 2013 17:22:57 UTC

by Tim Brown

What if i just want to return the execption information as JSON so it can be gracefully displayed via my client side code?

It doesn't appear I can stop execution within the onException() handler using renderData().noExecution() as renderData is ignored (as stated in the docs). Do I just need to set some headers and return the JSON manually via cfcontent?

Thanks!

Recent Entries

BoxLang 1.14.0 : Sets, Ranges, Inner Classes, and a Runtime That Talks Back

BoxLang 1.14.0 : Sets, Ranges, Inner Classes, and a Runtime That Talks Back

BoxLang has never stood still, but 1.14.0 is something different. This is the release where the language stops filling gaps and starts defining what a modern dynamic JVM language looks like on its own terms. Sixty-five issues closed. Four innovative language features. A formatter that has grown up. And a companion module - bx-mcp - that fundamentally changes how you operate a running BoxLang application with AI.

Luis Majano
Luis Majano
June 03, 2026
BoxLang Image Module 1.7.0: Full Format Freedom with WebP, GIF, BMP, TIFF and Built-in CAPTCHA

BoxLang Image Module 1.7.0: Full Format Freedom with WebP, GIF, BMP, TIFF and Built-in CAPTCHA

The BoxLang image module just landed two back-to-back releases that make it significantly more capable. 1.6.0 brought CAPTCHA generation. 1.7.0 adds four new image formats, fixes a silent write bug that has been producing PNG files regardless of what extension you asked for, and adds proper alpha channel handling for formats that don't support transparency. Let's dig in. 🚀

Luis Majano
Luis Majano
June 01, 2026
🚀 Introducing BoxLang MCP: Give Your AI a Window Into Your Running BoxLang Application

🚀 Introducing BoxLang MCP: Give Your AI a Window Into Your Running BoxLang Application

You launch your BoxLang application, traffic flows, schedulers execute, caches warm, threads spin. And when something goes wrong, you jump between logs, dashboards, admin panels, and monitoring tools to piece together the full picture. Meanwhile, your AI coding assistant only understands your source code. It has no visibility into your running application. It cannot tell you why your thread pool is saturated, whether cache performance is degrading, or which scheduled task silently failed overnight.

Luis Majano
Luis Majano
June 01, 2026