You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
// site-log.js
|
|
// Copyright (C) 2021 Digital Telepresence, LLC
|
|
// License: Apache-2.0
|
|
|
|
'use strict';
|
|
|
|
const util = require('util');
|
|
const moment = require('moment');
|
|
const rfs = require('rotating-file-stream');
|
|
|
|
var LogModel, LogStream;
|
|
|
|
if (process.env.DTP_LOG_FILE === 'enabled') {
|
|
LogStream = rfs.createStream(process.env.DTP_LOG_FILE_NAME_APP || 'site-app.log', {
|
|
path: process.env.DTP_LOG_FILE_PATH || '/tmp',
|
|
size: '10M',
|
|
interval: '1d',
|
|
compress: 'gzip',
|
|
});
|
|
}
|
|
|
|
class SiteLog {
|
|
|
|
/**
|
|
* Sets the Mongoose model to be used for writing log entries to the database.
|
|
* This is managed like this so we don't have to connect to the database and
|
|
* load the db models *before* we can write log entries to the console.
|
|
* @param {Model} model the Mongoose model to be used for writing logs.
|
|
*/
|
|
static setModel (model) { LogModel = model; }
|
|
|
|
constructor (dtp, componentName) {
|
|
this.dtp = dtp;
|
|
this.componentName = componentName;
|
|
}
|
|
|
|
async debug (message, metadata) {
|
|
if (process.env.DTP_LOG_DEBUG !== 'enabled') {
|
|
return;
|
|
}
|
|
return this.writeLog('debug', message, metadata);
|
|
}
|
|
|
|
async info (message, metadata) {
|
|
if (process.env.DTP_LOG_INFO !== 'enabled') {
|
|
return;
|
|
}
|
|
return this.writeLog('info', message, metadata);
|
|
}
|
|
|
|
async warn (message, metadata) {
|
|
if (process.env.DTP_LOG_WARN !== 'enabled') {
|
|
return;
|
|
}
|
|
return this.writeLog('warn', message, metadata);
|
|
}
|
|
|
|
async alert (message, metadata) {
|
|
return this.writeLog('alert', message, metadata);
|
|
}
|
|
|
|
async error (message, metadata) {
|
|
return this.writeLog('error', message, metadata);
|
|
}
|
|
|
|
async crit (message, metadata) {
|
|
return this.writeLog('crit', message, metadata);
|
|
}
|
|
|
|
async fatal (message, metadata) {
|
|
this.writeLog('fatal', message, metadata);
|
|
}
|
|
|
|
async writeLog (level, message, metadata) {
|
|
const NOW = new Date();
|
|
const { componentName } = this;
|
|
if (process.env.DTP_LOG_CONSOLE === 'enabled') {
|
|
if (metadata) {
|
|
console.log(`${moment(NOW).format('YYYY-MM-DD HH:mm:ss.SSS')} ${componentName} ${level} ${message}`, util.inspect(metadata, false, Infinity, true));
|
|
} else {
|
|
console.log(`${moment(NOW).format('YYYY-MM-DD HH:mm:ss.SSS')} ${componentName} ${level} ${message}`);
|
|
}
|
|
}
|
|
if (LogModel && (process.env.DTP_LOG_MONGODB === 'enabled')) {
|
|
await LogModel.create({ created: NOW, level, componentName, message, metadata });
|
|
}
|
|
if (LogStream && (process.env.DTP_LOG_FILE === 'enabled')) {
|
|
const logEntry = {
|
|
t: NOW, c: componentName, l: level, m: message, d: metadata,
|
|
};
|
|
LogStream.write(`${JSON.stringify(logEntry)}\n`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports.SiteLog = SiteLog;
|