From a074c22678ba2770251dc26f0e18de4b155b11f9 Mon Sep 17 00:00:00 2001 From: rjrodger Date: Fri, 30 Aug 2019 02:32:13 +0100 Subject: [PATCH] flat logs --- lib/api.js | 23 ++- lib/logging.js | 96 ++++++++-- lib/outward.js | 10 +- lib/plugins.js | 10 +- package-lock.json | 423 +++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + seneca.js | 26 +-- test/logging.test.js | 2 +- trial/log.js | 47 ++++- 9 files changed, 589 insertions(+), 49 deletions(-) diff --git a/lib/api.js b/lib/api.js index 83290138..bf4d05fd 100644 --- a/lib/api.js +++ b/lib/api.js @@ -60,7 +60,7 @@ exports.close = function(callpoint) { seneca.log.debug({ kind: 'close', notice: 'start', - callpoint: callpoint() + callpoint: callpoint(true) }) seneca.act('role:seneca,cmd:close,closing$:true', function(err) { @@ -201,9 +201,10 @@ exports.delegate = function(fixedargs, fixedmeta) { (delegate.did ? delegate.did + '/' : '') + self.private$.didnid() - delegate.logx = function logx() { return root.logx.apply(delegate, arguments)} - Object.assign(delegate.logx,root.logx) - delegate.logx.self = () => delegate + delegate.log = function log() { return root.log.apply(delegate, arguments)} + Object.assign(delegate.log,root.log) + delegate.log.self = () => delegate + var strdesc delegate.toString = function toString() { @@ -559,10 +560,11 @@ exports.listen = function(callpoint) { done = _.noop } - self.log.debug({ + self.log.info({ kind: 'listen', - options: argsarr, - callpoint: callpoint() + case: 'INIT', + data: argsarr, + callpoint: callpoint(true) }) var opts = self.options().transport || {} @@ -592,10 +594,11 @@ exports.client = function(callpoint) { var argsarr = Array.prototype.slice.call(arguments) var self = this - self.log.debug({ + self.log.info({ kind: 'client', - options: argsarr, - callpoint: callpoint() + case: 'INIT', + data: argsarr, + callpoint: callpoint(true) }) var legacy = self.options().legacy || {} diff --git a/lib/logging.js b/lib/logging.js index 07d012b0..c8ac5fc5 100644 --- a/lib/logging.js +++ b/lib/logging.js @@ -66,9 +66,56 @@ const level_abbrev = logging.level_abbrev = { // TODO: create concise production flat format function flat_logger(entry) { - Print.log('PRINT:', entry) + + //console.log(entry) + + var level_str = entry.level_name.toUpperCase() + if(level_str.length < 5) { + level_str += '_'.repeat(5-level_str.length) + } + level_str = level_str.substring(0,5) + + var da = + null != entry.err ? [entry.err.message, entry.err.callpoint] : + null != entry.res ? [entry.res] : + null != entry.msg ? [entry.msg] : + Array.isArray(entry.data) ? entry.data : + null != entry.data ? [entry.data] : + [] + + for(var i = 0; i < da.length; i++) { + da[i] = 'object' === typeof(da[i]) ? Common.clean(da[i]) : da[i] + da[i] = Util.inspect(da[i],{ + compact:true, + depth:(entry.depth||3), + breakLength:Infinity + }) + } + + var data_str = da.join(' ') + + var plugin_str = null==entry.plugin_name?'': + (entry.plugin_name+ + ((null==entry.plugin_tag||'-'==entry.plugin_tag)?'':'$'+entry.plugin_tag)) + + var sb = [ + entry.isot, + entry.seneca_id, + level_str, + (null==entry.kind?'log':entry.kind), + (null==entry.case?'LOG':entry.case), + plugin_str, + (null==entry.pattern?'':entry.pattern), + (null==entry.action?'':entry.action), + (null==entry.idpath?'':entry.idpath), + data_str, + entry.callpoint ? Util.inspect(entry.callpoint) : '' + ] + + console.log(sb.join(' ').substring(0,entry.maxlen||11111)) } + // TODO: make default function json_logger(entry) { var logstr = Stringify(entry) @@ -112,7 +159,8 @@ function load_logger(instance, log_plugin) { -function build_log_spec(self) { +function build_log_spec(self,flags) { + flags = flags || {} var options = self.options() var orig_logspec = options.log @@ -210,19 +258,22 @@ function build_log_spec(self) { log:logspec } - self.options(logopts) - + if(false !== flags.set_options) { + self.options(logopts) + } + //console.log('BUILD LOGSPEC OUT', logopts) return logspec } -function build_log(self) { - var logspec = build_log_spec(self) +function build_log(self,flags) { + var logspec = build_log_spec(self,flags) //console.log('LOGSPEC', logspec) // shortcut for direct access (avoids seneca.options() call) + //self.private$.optioner.set({log:logspec}) self.private$.logspec = logspec var logger = load_logger(self, logspec.logger) @@ -233,13 +284,18 @@ function build_log(self) { self.log = function log(entry) { var instance = this - + // Handle legacy entity call if(instance.entity$) { instance = instance.private$.get_instance() - entry = {data:arguments} + entry = {data:Array.prototype.slice.call(arguments)} + } + else if('string' === typeof(entry)) { + entry = {data:Array.prototype.slice.call(arguments)} } + //console.log('ENTRY',instance,entry) + var logspec = instance.private$.logspec entry.level = entry.level || logspec.default_level @@ -267,9 +323,20 @@ function build_log(self) { entry.plugin_tag = entry.plugin_tag || instance.fixedargs.plugin$.tag } + //console.log('IPA', instance.private$.act) + if(instance.private$.act) { + entry.kind = entry.kind || 'act' entry.actid = entry.actid || instance.private$.act.meta.id - entry.pattern = entry.pattern || instance.private$.act.def.pattern + entry.pattern = entry.pattern || instance.private$.act.meta.pattern + entry.action = entry.action || instance.private$.act.def.id + + entry.idpath = instance.private$.act.meta.tx + for(var i = 0; i < (instance.private$.act.meta.parents || []).length; i++) { + entry.idpath += '.'+(instance.private$.act.meta.parents[i][1].split('/')[0]) + } + entry.idpath += '.'+instance.private$.act.meta.mi + //console.log(instance.private$.act.meta) } // Log event is called on all logs - they are not filtered by level @@ -297,13 +364,14 @@ function make_log_level(level_name, logspec) { var log_level = function(entry) { var self = this.self() - if('object' === typeof(entry)) { - entry.level = level - } - else { - entry = {level:level, data:entry} + if('object' !== typeof(entry)) { + entry = { + data:Array.prototype.slice.call(arguments) + } } + entry.level = level + return self.log(entry) } diff --git a/lib/outward.js b/lib/outward.js index 25917b9a..86c34702 100644 --- a/lib/outward.js +++ b/lib/outward.js @@ -132,8 +132,14 @@ function outward_res_object(ctxt, data) { } function outward_announce(ctxt, data) { - if (!ctxt.actdef) return + // if (!ctxt.actdef) return + var meta = data.meta + + if(meta.error) { + return + } + if (_.isFunction(ctxt.seneca.on_act_out)) { ctxt.seneca.on_act_out(ctxt.actdef, data.res, data.meta) } @@ -145,7 +151,7 @@ function outward_announce(ctxt, data) { kind: 'act', case: 'OUT', duration: ctxt.duration, - result: data.res, + res: data.res, did: ctxt.seneca.did }) ) diff --git a/lib/plugins.js b/lib/plugins.js index 9d8bb662..ba36d113 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -27,6 +27,8 @@ module.exports.register = function(opts, callpoint) { var seneca = this var so = seneca.options() + var define_callpoint = callpoint(true) + // NOTE: `define` is the property for the plugin definition action. // The property `init` will be deprecated in 4.x plugin.define = plugin.define || plugin.init @@ -93,11 +95,11 @@ module.exports.register = function(opts, callpoint) { plugin_seneca.log.debug({ kind: 'plugin', - case: 'define', + case: 'DEFINE', name: plugin.name, tag: plugin.tag, options: plugin_options, - callpoint: callpoint + callpoint: define_callpoint }) var meta = define_plugin( @@ -150,7 +152,7 @@ module.exports.register = function(opts, callpoint) { plugin_seneca.log.debug({ kind: 'plugin', - case: 'init', + case: 'INIT', name: plugin.name, tag: plugin.tag, exports: exports @@ -191,7 +193,7 @@ module.exports.register = function(opts, callpoint) { plugin_seneca.log.info({ kind: 'plugin', - case: 'ready', + case: 'READY', name: plugin.name, tag: plugin.tag }) diff --git a/package-lock.json b/package-lock.json index 870ae3bb..76fb4989 100644 --- a/package-lock.json +++ b/package-lock.json @@ -199,6 +199,15 @@ "fastq": "^1.6.0" } }, + "@seneca/repl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@seneca/repl/-/repl-1.4.0.tgz", + "integrity": "sha512-rGsqUl/ZUyl+QZCe8mS+qcciOs/BnjxPGvsCcm4CQpu3ULXIzAwzkg7jJIzbI9Re52Pr0ceMau9Hp5Q9rQZDfA==", + "dev": true, + "requires": { + "vorpal": "^1.12.0" + } + }, "@seneca/test-plugin": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@seneca/test-plugin/-/test-plugin-0.0.1.tgz", @@ -362,6 +371,35 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, "backoff": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", @@ -562,6 +600,12 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -614,6 +658,12 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -882,6 +932,12 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1278,6 +1334,23 @@ "har-schema": "^2.0.0" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1373,6 +1446,12 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1523,6 +1602,15 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "requires": { + "punycode": "2.x.x" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1539,6 +1627,17 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "joi": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-12.0.0.tgz", + "integrity": "sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ==", + "dev": true, + "requires": { + "hoek": "4.x.x", + "isemail": "3.x.x", + "topo": "2.x.x" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1628,6 +1727,49 @@ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } + } + }, "lolex": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", @@ -1797,6 +1939,12 @@ "resolved": "https://registry.npmjs.org/nid/-/nid-0.3.2.tgz", "integrity": "sha1-l3qTGO1cKjjt1mJj8+r9gUPyJRo=" }, + "node-localstorage": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz", + "integrity": "sha1-RaBgHGky395mRKIzYfG+Fzx1068=", + "dev": true + }, "norma": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/norma/-/norma-1.0.0.tgz", @@ -1806,12 +1954,24 @@ "lodash": "^4.17.15" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -2063,6 +2223,34 @@ "util-deprecate": "~1.0.1" } }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + } + } + }, "reconnect-core": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", @@ -2071,6 +2259,12 @@ "backoff": "~2.5.0" } }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -2188,6 +2382,12 @@ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", "dev": true }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, "rxjs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", @@ -2272,6 +2472,29 @@ "optioner": "^4.0.0" } }, + "seneca-repl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/seneca-repl/-/seneca-repl-1.2.0.tgz", + "integrity": "sha512-HvWU/bnxnjwb50l9vBCG3BUgW5TouQF6MBsDAJzuNwRTJnIAfO9sMrlJojH8aN9TjRfClDvVa75LuNnSFJ1Gzw==", + "dev": true, + "requires": { + "jsonic": "0.3", + "lodash": "4.17", + "optioner": "1.1" + }, + "dependencies": { + "optioner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/optioner/-/optioner-1.1.0.tgz", + "integrity": "sha512-tYo5UTfFkflHjO6MIwoPFxR7ALhcUEEP+WZaNAn2iGRe0j9pvEsw0qWxtbxYqPyOs6xecWq3EAm/p19DV73jAw==", + "dev": true, + "requires": { + "hoek": "4.2.x", + "joi": "12.0.x" + } + } + } + }, "seneca-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-3.0.0.tgz", @@ -2708,6 +2931,15 @@ "is-number": "^7.0.0" } }, + "topo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -3189,6 +3421,150 @@ "extsprintf": "^1.2.0" } }, + "vorpal": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz", + "integrity": "sha1-S+eypOSPj8/JzzZIxBnTEcUiFZ0=", + "dev": true, + "requires": { + "babel-polyfill": "^6.3.14", + "chalk": "^1.1.0", + "in-publish": "^2.0.0", + "inquirer": "0.11.0", + "lodash": "^4.5.1", + "log-update": "^1.0.2", + "minimist": "^1.2.0", + "node-localstorage": "^0.6.0", + "strip-ansi": "^3.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "inquirer": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.0.tgz", + "integrity": "sha1-dEi/qSQJKvMR1HFzu6uZDK4rsCc=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3207,6 +3583,53 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 726a9145..516caa59 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "@hapi/code": "^6.0.0", "@hapi/hoek": "^8.2.0", "@hapi/lab": "^20.0.0", + "@seneca/repl": "^1.4.0", "@seneca/test-plugin": "0.0.1", "async": "^3.1.0", "bench": "^0.3.6", diff --git a/seneca.js b/seneca.js index 8736a6b9..9d8900ef 100644 --- a/seneca.js +++ b/seneca.js @@ -346,7 +346,7 @@ module.exports = function init(seneca_options, more_options) { } seneca.ready(function() { - this.log.info({ kind: 'notice', notice: 'hello seneca ' + seneca.id }) + this.log.info({ kind: 'notice', data: 'hello' }) }) return seneca @@ -782,10 +782,9 @@ function make_seneca(initial_options) { self.log.debug({ kind: 'add', case: actdef.sub ? 'SUB' : 'ADD', - id: actdef.id, + action: actdef.id, pattern: actdef.pattern, - name: action.name, - callpoint: callpoint + callpoint: callpoint(true) }) private$.actrouter.add(pattern, actdef) @@ -970,18 +969,22 @@ function make_seneca(initial_options) { var self = this // self.log may not exist yet as .options() used during construction - if (options != null && self.log) { + if (null != options && self.log) { self.log.debug({ kind: 'options', case: 'SET', - options: options, - callpoint: callpoint() + data: options }) } opts.$ = private$.exports.options = options == null ? private$.optioner.get() : private$.optioner.set(options) + // Update logging configuration + if(null != options && options.log) { + Logging.build_log(self,{set_options:false}) + } + // DEPRECATED if (opts.$.legacy.logging) { if (options && options.log && Array.isArray(options.log.map)) { @@ -1051,17 +1054,18 @@ function make_private() { // Callpoint resolver. Indicates location in calling code. function make_callpoint(active) { - if (active) { - return function() { + return function callpoint(override) { + if(active || override) { return error.callpoint(new Error(), [ '/seneca/seneca.js', '/seneca/lib/', '/lodash.js' ]) } + else { + return void 0 + } } - - return Common.noop } /* diff --git a/test/logging.test.js b/test/logging.test.js index d8e0edc5..c6a43555 100644 --- a/test/logging.test.js +++ b/test/logging.test.js @@ -134,7 +134,7 @@ describe('logging', function() { }) var hello_entry = logb[logb.length - 2] - expect(hello_entry.notice).startsWith('hello') + expect(hello_entry.data).startsWith('hello') fin() }) diff --git a/trial/log.js b/trial/log.js index 27686799..f4e156fa 100644 --- a/trial/log.js +++ b/trial/log.js @@ -3,9 +3,30 @@ var Seneca = require('..') function ab(msg, reply) { - reply({b:msg.b,x:msg.x}) + var x = msg.x + var y = 0 + if(2===x) { + this.log.info('ab-x', x) + } + else if(3===x) { + this.act('c:1',{x:x},function(err, out) { + reply(err || {b:msg.b,x:x,y:out.y}) + }) + return + } + + reply({b:msg.b,x:x,y:y}) +} + +function c(msg, reply) { + reply({y:1}) +} + +function d(msg, reply) { + throw new Error('foo') } + var si = Seneca() si @@ -15,12 +36,24 @@ si .add('a:2,b:2', ab) }) - .add('a:1,b:1', ab) - .add('a:1,b:2', ab) + .add('a:1,b:1', ab) + .add('a:1,b:2', ab) + + + .act('a:1,b:1,x:1') + .act('a:1,b:2,x:2') + .act('a:2,b:1,x:1') + .act('a:2,b:2,x:2') + + .add('c:1', c) + .act('a:1,b:1,x:3') + - .act('a:1,b:1,x:1') - .act('a:1,b:2,x:2') - .act('a:2,b:1,x:1') - .act('a:2,b:2,x:2') + .add('d:1', d) + .act('d:1') + .log.info('info-zero', {zero:0}) + .listen(9000) + .client(9000) + .use('repl')