Add Support for Cascading LogLevel Configuration
Opened this issue · 1 comments
JSLogger should cascade the LogLevel configuration for named loggers based on their namespace, so for example:
var loggerA = Logger.get("parentNS.clientA");
// Configure the LogLevel of the parent namespace
Logger.get("parentNS").setLevel(Logger.WARN);
loggerA.info("Info Message"); // No output
loggerA.warn("Warning Message"): // Logs "Warning Message"
This feature would provide developers a way to express log levels for an entire group of clients without having to manually list them all out.
You could have a look at how debug
does this.
Debug has no global logger, only named loggers. And it is basically just a list, there is no hierarchy.
But it can simulate hierarchy through naming conventions. They recommend using colon :
to separate levels:
var debug = require('debug')
var log = require('my-app:my-module')
log('Hello!')
By default, this would not produce any output, but you can enable loggers using a pattern:
debug.enable('my-app:my-module') // enables only the one module
debug.enable('my-app:*') // enables every submodule of my-app
They translate the pattern and then use simple regex pattern matching on the name to determine if the logger is enabled or not. It works surprisingly well.