4 changed files with 146 additions and 29 deletions
Split View
Diff Options
-
99lib/log.js
-
64rpc.js
-
9server.js
-
3storage/file.js
@ -0,0 +1,99 @@ |
|||
/*jshint esversion: 6 */ |
|||
var Store = require("../storage/file"); |
|||
|
|||
var Logger = module.exports; |
|||
|
|||
/* Every line in the log should contain: |
|||
* timestamp |
|||
* public key of initiator |
|||
* the action |
|||
* the event's tag |
|||
*/ |
|||
var messageTemplate = function (type, time, tag, info) { |
|||
return JSON.stringify([type.toUpperCase(), time, tag, info]); |
|||
}; |
|||
|
|||
var write = function (ctx, content) { |
|||
ctx.store.log(ctx.channelName, content); |
|||
}; |
|||
|
|||
// various degrees of logging
|
|||
const logLevels = ['silly', 'debug', 'verbose', 'feedback', 'info', 'warn', 'error']; |
|||
|
|||
var handlers = { |
|||
silly: function (ctx, time, tag, info) { |
|||
console.log('[SILLY]', time, tag, info); |
|||
}, |
|||
debug: function (ctx, time, tag, info) { |
|||
console.log('[DEBUG]', time, tag, info); |
|||
}, |
|||
verbose: function (ctx, time, tag, info) { |
|||
console.log('[VERBOSE]', time, tag, info); |
|||
}, |
|||
feedback: function (ctx, time, tag, info) { |
|||
console.log('[FEEDBACK]', time, tag, info); |
|||
}, |
|||
info: function (ctx, time, tag, info) { |
|||
console.info('[INFO]', time, tag, info); |
|||
}, |
|||
warn: function (ctx, time, tag, info) { |
|||
console.warn('[WARN]', time, tag, info); |
|||
}, |
|||
error: function (ctx, time, tag, info) { |
|||
console.error('[ERROR]', time, tag, info); |
|||
} |
|||
}; |
|||
|
|||
var createLogType = function (ctx, type) { |
|||
return function (tag, info) { |
|||
var time = new Date().toISOString(); |
|||
var content; |
|||
try { |
|||
content = messageTemplate(type, time, tag, info); |
|||
} catch (e) { |
|||
return; |
|||
} |
|||
|
|||
if (ctx.logToStdout && typeof(handlers[type]) === 'function') { |
|||
handlers[type](ctx, time, tag, info); |
|||
} |
|||
write(ctx, content); |
|||
}; |
|||
}; |
|||
|
|||
// Log.verbose('THING', x);
|
|||
Logger.create = function (config, cb) { |
|||
if (!config.logPath) { |
|||
// XXX don't crash, print that you won't log to file
|
|||
throw new Error("Logger: Expected filePath"); |
|||
} |
|||
|
|||
/* config: { |
|||
filePath: '???', |
|||
logLevel: 'silly', |
|||
} */ |
|||
|
|||
var date = new Date(); |
|||
var launchTime = ('' + date.getUTCFullYear()).slice(-2) + date.toISOString(); |
|||
|
|||
Store.create({ |
|||
filePath: config.logPath, |
|||
}, function (store) { |
|||
var ctx = { |
|||
store: store, |
|||
channelName: launchTime, |
|||
logFeedback: Boolean(config.logFeedback), |
|||
// TODO respect configured log settings
|
|||
logLevel: logLevels.indexOf(config.logLevel), // 0 for silly, 1 for debug
|
|||
}; |
|||
|
|||
var log = {}; |
|||
logLevels.forEach(function (type) { |
|||
log[type] = createLogType(ctx, type); |
|||
}); |
|||
|
|||
cb(Object.freeze(log)); |
|||
}); |
|||
}; |
|||
|
|||
|
|||
Write
Preview
Loading…
Cancel
Save