@code-nl/cloud-logging
Version:
Interface over @google-cloud/logging
189 lines (167 loc) • 4.54 kB
JavaScript
;
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);
}
};