raven-cfml is a CFML client for Sentry.
To install the source code:
$ git clone git://github.com/iGLOO-be/raven-cfml.git
And instantiate the object:
<cfset ravenConfig = structNew()>
<cfset ravenConfig.publicKey = "[your_public_key]">
<cfset ravenConfig.privateKey = "[your_private_key]">
<cfset ravenConfig.sentryUrl = "[http://sentry_url]">
<cfset ravenConfig.projectID = [numeric_project_id]>
<cfset ravenClient = createObject('component', '[path.to.raven].lib.client').init(argumentCollection=ravenConfig)>
<cffunction name="OnError" access="public" returntype="void" output="false">
<cfargument name="exception" type="any" required="true">
<cfargument name="eventName" type="string" required="false" default="">
<cfset ravenClient.captureException(exception)>
</cffunction>
<cftry>
<!--- Code to execute --->
<cfcatch>
<!--- Capture a exception --->
<cfset ravenClient.captureException(cfcatch)>
<!--- Capture a message --->
<cfset ravenClient.captureMessage("This is a message.")>
</cfcatch>
</cftry>
Explore the client.cfc library for all available arguments.
It maybe helpful to wrap the capture calls inside cfthread to isolate the api call to sentry for performance.
<cftry>
<!--- Code to execute --->
<cfcatch>
<cfthread action="run" name="ravenThread" exception="#cfcatch#" cgiVars="#CGI#" httpRequestData="#getHttpRequestData()#">
<cfset ravenConfig = structNew()>
<cfset ravenConfig.publicKey = "[your_public_key]">
<cfset ravenConfig.privateKey = "[your_private_key]">
<cfset ravenConfig.sentryUrl = "[http://sentry_url]">
<cfset ravenConfig.projectID = [numeric_project_id]>
<cfset ravenConfig.cgiVars = cgiVars>
<cfset ravenConfig.httpRequestData = httpRequestData>
<cfset ravenClient = createObject('component', '[path.to.raven].lib.client').init(argumentCollection=ravenConfig)>
<cfset ravenClient.captureException(cfcatch)>
</cfthread>
</cfcatch>
</cftry>
There is a plugin for sentry (sentry-cfml) that includes a custom interface so that raven-cfml can send CFML specific variables.
Once installed, you can reference it using
<cfset ravenConfig = structNew()>
...
<cfset ravenConfig.customHttpInterface = 'sentry_cfml.interfaces.CFMLHttp'>
...
<cfset ravenClient = createObject('component', '[path.to.raven].lib.client').init(argumentCollection=ravenConfig)>