In ServiceNow, GSLog is a script include that provides a way to write messages to the Log [syslog] whenever a server-side script is executed. This is very useful for when you are working in server-side code and need to debug the code.
In a client-side script, you'd usually just add an info message with the values or variables that you're attempting to debug. However, when you're server-side, you can't do that. This is where GSLog comes in to help!
GSLog is called in a script by using the gs.log() method as a line of code, and is callable in any server-side Global object, including (but not limited to) Business Rules, Script Includes, server-side UI Actions, Scheduled Jobs, and Fix Scripts.
Below are the parameters for gs.log():
message: the message (string or variables) to be recorded to the system log, contained within parenthesis. Appears in the "Message" column of the Log [syslog] entry.
source (optional): a string of text to identify the log entry, also contained within parenthesis. Although an optional parameter, it's recommended to include a source it will appear in the "Source" column of the Log [syslog] entry, making it much easier to locate the entry.
Below is an example GSLog script:
When initiated, the above line of script will create a single record in the Log [syslog] table
In the scenario below, we have created a custom scoped application with a "Snowy Tickets" table (extended from the Tasks table) with the system name [x_547261_snowyco_0_snowy_tickets]. Along with the custom table is a Global scheduled job, that when executed will query the Snowy Tickets table for records with a status of Open ('1'), then sets all retrieved records with this status to Work in Progress ('2'). Below is the script from the scheduled job:
However, we would like to log whenever the scheduled job is executed, and well as log additional information such as how many records the query retrieved, and which specific records were updated. (if any) To accomplish this, we've modified the script to include four gs.log() lines:
When executed, the scheduled job will create a minimum of three log records in the Log table, depending on how many records are retrieved. All records will have Source = MyScript (as this is the value we defined as the source parameter in all gs.log() lines) as well as Level = Information. The Message values values will be the following:
Entry 1: Starting to query records from table: x_547261_snowyco_0_snowy_tickets
Entry 2: <number> records found with status 'Open'
Entry 3: Updated record sys_id <sys_id of record> to status 'Work in Progress
Alternate Entry 3 if no records found: No records found with status 'Open'
To view the Log table, perform the following:
1) Using the Filter Navigator, navigate to System Logs > All.
2) The Log table [syslog] is displayed. The default columns are Created, Level, Message, and Source.
Note: Log records created using gs.log() will always have Level = Information.
3) To easily locate the log records created by the scheduled job execution, perform the following, run a filter on the Source column for MyScript.
Note: by default the Logs table automatically adds a filter for "Created Today", so disable this filter if needed (just a heads up though, depending on your instance, disabling that filter could cause the table to load for multiple minutes)
As mentioned earlier in this article, gs.log() will only function on a Global script, although the script can still query tables from custom scoped applications such as in the scenario above: the scheduled job is Global, but the [x_547261_snowyco_0_snowy_tickets] table that was queried is from custom scoped application.
For scripts within custom scoped applications, gs.info() must be used instead. This method utilizes the exact same parameters as gs.log().
The GSLog script include provides a useful tool for ServiceNow developers by allowing the logging of messages from server-side, Global scripts. Developers will often utilize it for debugging or tracking purposes. We hope this guide has helped you learn more about it and you can add it to your ServiceNow development arsenal!