Logga has so far been built just for capturing errors, not outputting them anywhere. Since existing logging solutions aren't configurable with files in a nice way, we could add this functionality to logga for configurable output.
{
"level": "debug",
"format": "${time} ${levelname} ${message}"
"handlers": [
{
"type": "file",
"path": "/path/to/file",
"level": "warning"
},
{
"type": "file",
"path": "/errors/only",
"level": "error"
}
{
"type": "console",
"level": "debug",
"format": "${levelEmoji} ${levelName} ${time} ${message} ${trace}"
},
{
"type": "syslog"
"level": "error"
}
],
"loggas": {
"stencila.encoda": {
"handlers": []
},
"stencila.schema": {
"level": "error",
"handlers": [
{
"type": "console",
"level": "debug"
}
]
}
}
}
The message level must exceed both the handler level, global level and (if in a module) the module level to be logged somewhere.
If a logging module name is not found in the loggas dictionary it will fall back to the defaults.
Some examples:
log = getLogger('stencila.thema')
log.debug('some message')
Would log only to the console with a 🚨 emoji.
Would log to /errors/only, /path/to/file, console and syslog. The syslog and file formats would be the global format.
encLogger = getLogger('stencila.encoda')
log.critical('some message')
Would not log anywhere as stencila.encoda has no handlers.
encLogger = getLogger('stencila.schema')
log.debug('some debug message')
Would not log anywhere because the stencila.schema log level is error so handlers can not override it.
There could be a standard list of default locations to look for a configuration file in, or passed in from the command line. (logga.json in the project dir, ~/.logga.json, /etc/logga.json etc)
Logga has so far been built just for capturing errors, not outputting them anywhere. Since existing logging solutions aren't configurable with files in a nice way, we could add this functionality to logga for configurable output.
{ "level": "debug", "format": "${time} ${levelname} ${message}" "handlers": [ { "type": "file", "path": "/path/to/file", "level": "warning" }, { "type": "file", "path": "/errors/only", "level": "error" } { "type": "console", "level": "debug", "format": "${levelEmoji} ${levelName} ${time} ${message} ${trace}" }, { "type": "syslog" "level": "error" } ], "loggas": { "stencila.encoda": { "handlers": [] }, "stencila.schema": { "level": "error", "handlers": [ { "type": "console", "level": "debug" } ] } } }The message
levelmust exceed both the handler level, globalleveland (if in a module) the modulelevelto be logged somewhere.If a logging module name is not found in the
loggasdictionary it will fall back to the defaults.Some examples:
Would log only to the console with a 🚨 emoji.
Would log to
/errors/only,/path/to/file, console and syslog. The syslog and file formats would be the globalformat.Would not log anywhere as
stencila.encodahas no handlers.Would not log anywhere because the
stencila.schemalog level iserrorso handlers can not override it.There could be a standard list of default locations to look for a configuration file in, or passed in from the command line. (
logga.jsonin the project dir,~/.logga.json,/etc/logga.jsonetc)