-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSlackAppender.cfc
68 lines (65 loc) · 2.89 KB
/
SlackAppender.cfc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<cfcomponent extends="coldbox.system.logging.AbstractAppender" output="false">
<cffunction name="init" access="public" output="false" returntype="SlackAppender">
<cfargument name="name" required="true" hint="The unique name for this appender."/>
<cfargument name="properties" required="false" default="#structnew()#" hint="A map of configuration properties for the appender"/>
<cfargument name="layout" required="false" default="" hint="The layout class to use in this appender for custom message rendering."/>
<cfargument name="levelMin" required="false" default="0" hint="The default log level for this appender, by default it is 0. Optional. ex: LogBox.logLevels.WARN"/>
<cfargument name="levelMax" required="false" default="4" hint="The default log level for this appender, by default it is 5. Optional. ex: LogBox.logLevels.WARN"/>
<cfscript>
// Init supertype
super.init(argumentCollection=arguments);
// valid columns
instance.columns = "id,severity,category,logdate,appendername,message,extrainfo";
// UUID generator
instance.uuid = createobject("java", "java.util.UUID");
// Verify properties
if( NOT propertyExists('webhookURL') ){
$throw(message="No webhookURL property defined",type="SlackAppender.InvalidProperty");
}
//defaults
if( NOT propertyExists('channel') ){
setProperty("channel",'');
}
if( NOT propertyExists('username') ){
setProperty("username",'');
}
return this;
</cfscript>
</cffunction>
<!--- Log Message --->
<cffunction name="logMessage" access="public" output="false" returntype="void" hint="Write an entry into the logger.">
<!--- ************************************************************* --->
<cfargument name="logEvent" type="any" required="true" hint="The logging event"/>
<!--- ************************************************************* --->
<cfscript>
var loge = arguments.logEvent;
var payload = StructNew();
var entry = "";
</cfscript>
<cftry>
<cfsavecontent variable="entry">
<cfoutput>
<p>TimeStamp: #loge.getTimeStamp()#</p>
<p>Severity: #loge.getSeverity()#</p>
<p>Category: #loge.getCategory()#</p>
<hr/>
<p>#loge.getMessage()#</p>
<hr/>
<p>Extra Info Dump:</p>
<cfdump var="#loge.getExtraInfo()#" format="text" >
</cfoutput>
</cfsavecontent>
<cfset payload["text"] = entry>
<cfif getProperty("channel") neq "">
<cfset payload["channel"] = getProperty("channel")>
</cfif>
<cfhttp url="#getProperty("webhookURL")#" method="post" throwonerror="true" multiparttype="" result="slackres">
<cfhttpparam type="body" value="#SerializeJSON(payload)#">
</cfhttp>
<cfset $log("DEBUG","slack appender response #slackres#")>
<cfcatch>
<cfset $log("ERROR","Error sending message to slack.com from appender #getName()#. #cfcatch.message# #cfcatch.detail# #cfcatch.stacktrace#")>
</cfcatch>
</cftry>
</cffunction>
</cfcomponent>