From 6602ff6d9372b3e2a5dd16e593f911bacf38601e Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Fri, 6 Mar 2020 21:50:11 -0500 Subject: [PATCH] add logger helper for modules --- js/web-server.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/js/web-server.js b/js/web-server.js index c109454d..00e7bd89 100644 --- a/js/web-server.js +++ b/js/web-server.js @@ -730,6 +730,7 @@ let ver = require('../js/license.js'), url = require('url'), dns = require('dns'), util = require('util'), + path = require('path'), valid = require('validator'), agent = require('express-useragent'), spawn = require('child_process').spawn, @@ -994,6 +995,10 @@ function initModule(file, dir) { args: args, debug: debug }, + pkg: { + agent, + moment + }, util: { log: helper.log, time: time, @@ -1002,7 +1007,8 @@ function initModule(file, dir) { lastmod: lastmod, obj2string: obj2string, string2obj: string2obj, - getCookieValue: getCookieValue + getCookieValue: getCookieValue, + logger: open_logger }, db: { api: db, @@ -1090,6 +1096,50 @@ function ws_register_root(path, handler) { } } +function open_logger(options) { + let opt = options || { + dir: "logs" + } + let logfile = null; + let logstream = null; + let pattern = opt.pattern || 'YYMMDDHH'; + let last_pattern; + + try { + fs.mkdirSync(opt.dir); + } catch (e) { } + + // create file write stream + function open_file_stream() { + close_file_stream(); + logfile = path.join(opt.dir, last_pattern = moment().format(pattern)); + logstream = fs.createWriteStream(logfile, {flags: 'a'}); + } + + function close_file_stream() { + if (logstream) { + logstream.close(); + logstream = null; + } + } + + function emit(obj) { + let next_pattern = moment().format(pattern); + if (next_pattern !== last_pattern) { + open_file_stream(); + } + logstream.write(moment().format('YYMMDD-HHmmss')); + logstream.write(" "); + logstream.write(JSON.stringify(obj)); + logstream.write("\n"); + } + + process.on('beforeExit', close_file_stream); + process.on('exit', close_file_stream); + + return { emit, close: close_file_stream }; +} + /* ********************************************* * Start it up ********************************************* */ @@ -1117,6 +1167,7 @@ modPaths.forEach(fn => { handler = handler.use(fn); }); + // add the rest of the handler chain handler.use(fullpath({ "/meta/index.html" : redir("/meta/"),