UNPKG

@code-nl/cloud-logging

Version:

Interface over @google-cloud/logging

189 lines (167 loc) 4.54 kB
'use strict'; const { Logging } = require('@google-cloud/logging'); /** * The Logging instance cache * @var {Logging} */ let _logging = null; /** * The logs name (grouper) cache * @var {String} */ let _logName = null; /** * Merge the message with payload to one data object * * @param {String} message The log message * @param {Object} payload The log message's payload * @return {Object} */ const mergeMessageWithPayload = (message, payload) => { const data = Object.assign( payload || {}, { message: message } ); return data; }; /** * Write a log * * @param {Object} data Log message setup, like message, labels, severity */ const _writeLog = (severity, data) => { // guard: logging client must be initialized if (_logging === null || _logName === null) { throw new Error("Logging client is not yet initialized. Use the init() method."); } // guard: must have a message if (typeof data.message !== "string" || data.message.length < 1) { throw new Error("A message is required when logging."); } // init a new log const log = _logging.log(_logName); // set metadata const metadata = { resource: { type: "global", }, severity: severity }; // prepare log entry const entry = log.entry( metadata, data ); // write log entry failsafe return log .write(entry) .catch(error => { console.error("Something went wrong with Google Cloud logging."); console.error(error); return Promise.resolve(); }); }; /** * Log to GCP Stackdriver */ module.exports = { /** * Initialize the logger interface * * @param {String} projectId The GCP project id * @param {String} logName The log name used to group all log messages into */ init: (projectId, logName) => { // only initialize once if (_logging === null) { // initialize logging with projectId _logging = new Logging({ projectId: projectId }); // set the log name (a log grouper) _logName = logName || "unknown"; } }, /** * Log a message with severity "debug" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ debug: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("DEBUG", data); }, /** * Log a message with severity "info" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ info: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("INFO", data); }, /** * Log a message with severity "notice" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ notice: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("NOTICE", data); }, /** * Log a message with severity "warning" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ warning: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("WARNING", data); }, /** * Log a message with severity "error" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ error: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("ERROR", data); }, /** * Log a message with severity "critical" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ critical: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("CRITICAL", data); }, /** * Log a message with severity "alert" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ alert: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("ALERT", data); }, /** * Log a message with severity "emergency" * * @param {String} message The log message * @param {Object} payload Optional: Extra log message payload */ emergency: (message, payload) => { const data = mergeMessageWithPayload(message, payload); return _writeLog("EMERGENCY", data); } };