Blog

ColdBox 4.0 Error Handling

Brad Wood January 29, 2015

Spread the word

Brad Wood

January 29, 2015

Spread the word


Share your thoughts

ColdBox has always provided nice, automatic error handling for your code.  Errors in your application are caught for you, and you can respond to them via convention-based methods, event handlers, or even interception points as you see fit.  (Read more on ColdBox error handling here)

If you do nothing, ColdBox will render a nicely formatted page with all the original exception information plus extra details about the ColdBox request which can be handy for debugging.  Due to our focus on security-by-default in ColdBox 4, we found that a large  number of people never change the default error template and their production servers give out way too much information!  Even though having a 'detailed' template by default was convenient, it wasn't secure.  

Therefore, we now ship ColdBox with two error templates.  (Of course you are still encouraged to make your own custom ones.)

  • BugReport.cfm
  • BugReport-Public.cfm

Get Your Info Back

BugReport-Public is what is enabled by default.  It outputs very little information so the baddies can't use your default error template as an attack vector to gather information about your server.  Don't worry though, the original error template (BugReport) is still there and can easily be enabled at any time. 

To get your old error template back, simply add the customErrorTemplate setting in your /config/ColdBox.cfc like so:

coldbox = {
	customErrorTemplate = "/coldbox/system/includes/BugReport.cfm"
};

Note: you can point to any valid .cfm file with this setting.  Feel free to create your own themed error template that matches your site's layout.  Just remember, this is not a view-- just a stand-alone .cfm file that can only access the variables.exception object.

An Even Better Way

We don't recommend just changing the setting like that because you're likely to forget and put yourself back at square 1 again when you push your code to production.  What's best is to leave the production error template to a 'secure' one and add a development override that only uses the public template on your development servers.  

coldbox = {
	customErrorTemplate = "/includes/myCustomPrettyErrorPage.cfm"
};

environments = {
	development = "localhost"
};

function development(){
	coldbox.customErrorTemplate = "/coldbox/system/includes/BugReport.cfm";
};

Now, your default production setting is your custom pretty error page, but on your dev server you get the juicy details.  Make sure you've also configured some LogBox logging on production so you have some way to get your error messages!

Read more about ColdBox 4 compatibility here:

http://wiki.coldbox.org/wiki/Compatibility:4.0.0.cfm

Install ColdBox 4.0 with CommandBox today with this simple command:

CommandBox> install coldbox

Add Your Comment

Recent Entries

MatchBox and WebAssembly: Running BoxLang in the Browser and at the Edge

MatchBox and WebAssembly: Running BoxLang in the Browser and at the Edge

The MatchBox open beta is live at https://boxlang.ortusbooks.com/boxlang-framework/matchbox, and it brings something genuinely new to the BoxLang ecosystem: a path into WebAssembly.

That means BoxLang code can now move into browser applications, static-site deployments, edge runtimes, and WASI-style containers - without requiring a JVM. The feature is still beta, but the core direction is already useful: write BoxLang, compile it with MatchBox, and ship the generated WASM artifact to wherever a small portable runtime makes sense.

Jacob Beers
Jacob Beers
June 04, 2026
BoxLang 1.14.0 : BoxSet is Here: BoxLang's New First-Class Set Type

BoxLang 1.14.0 : BoxSet is Here: BoxLang's New First-Class Set Type

BoxLang 1.14.0 ships something that JVM developers have wanted for a long time: a true first-class Set type baked directly into the language. Not a wrapper you reach for manually, not a createObject( "java", "java.util.HashSet" ) incantation you paste from a Stack Overflow answer years ago. A real BoxSet with literal syntax, operator overloads, a full functional pipeline, change listeners, JSON serialization, and deep Java interop.

Luis Majano
Luis Majano
June 03, 2026
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