Would it be useful to have method that handles the details of formatting the message for analytics and doesn't depend on the caller to pass in a correctly formatted string and json?  Maybe by default add the timestamp  and source IP address to the json?