For anyone interested with supporting this passion project, please check out Contributing.
An overly complicated yet functional logger. Package: @tinnyterr/logmatic
For all systems, please use:
npm i logmatic --save-exactWhenever possible, set the following setting in your tsconfig.json or such:
{
"compilerOptions": {
// ...
"noPropertyAccessFromIndexSignature": false,
// ...
}
}Or you must use the following to access your logging statements:
log["fatal"]("a");As logmatic is currently in a very unstable state, many items may change in the future.
To get started, import the project into your file and initialise the logger:
const { Logger } = require('@tinnyterr/logmatic');
// OR
// import { Logger } from '@tinnyterr/logmatic';
const log = new Logger("name").loggers;WAIT! If you wish to alter the logger down the line (eg add logger handler functions), you will need to save the Logger class for later. The above code just accesses all the logger function. For example:
const { Logger } = require('@tinnyterr/logmatic');
// OR
// import { Logger } from '@tinnyterr/logmatic';
const logClass = new Logger("name");
const log = logClass.loggers
// Do some stuff
log.info("blah blah")
logClass.addFunctions(() => { return })For the default added levels, use the following:
| Function Call | Format | Colour |
|---|---|---|
log.trace() |
{time} [trace] {name} {...data} |
Cyan |
log.debug() |
{time} [debug] {name} {...data} |
Blue Background |
log.info() |
{time} [info] {name} {...data} |
Blue |
log.warn() |
{time} [warn] {name} {...data} |
Yellow |
log.error() |
{time} [error] {name} {...data} |
Red |
log.fatal() |
{time} [fatal] {name} {...data} |
Red Background |
For your custom levels, please see Levels below
The following section is expecting you have imported the class. It will then demonstrate how to set the option.
Whether console logging is enabled
Default: true
const log = new Logger("name", { console: { enabled: true }}).loggersThe minimum level to log. This corresponds with the position in the array the level is. See Levels.
Default: 1
const log = new Logger("name", { console: { logLevel: 1 }}).loggersWhether to suppress warnings or errors emitted by the logger
Default: false
WARNING: This option is currently not in use.
const log = new Logger("name", { console: { supressWarnings: false }}).loggersWhether to format and colourise any JSON output
Default: false
const log = new Logger("name", { console: { format: false }}).loggersWhether to indent any JSON output.
Console.format must be true if Console.indent is greater than 0
Default: 0
const log = new Logger("name", { console: { indent: 0 }}).loggersWARNING: This option is currently not in use. Note: This module requires that several options are filled in tandem.
Whether file logging is enabled
Default: false
const log = new Logger("name", { files: { enabled: false }}).loggersThe log directory
In-depth: if path = /path/to/dir/ then logs will be stored as /path/to/dir/log.txt etc.
Default null
const log = new Logger("name", { files: { path: null }}).loggersHow to name the files
Default: null
The type of file stored
Default: json
const log = new Logger("name", { files: { type: "json" }}).loggersWARNING: Web is currently in a unstable state and should not be used.
Whether web (POST) logging is enabled
Default: false
const log = new Logger("name", { web: { enabled: false }}).loggersThe URL to post to
Default: null
const log = new Logger("name", { web: { url: null }}).loggersThe data type sent
Default: json
const log = new Logger("name", { web: { type: "json" }}).loggersHow many logs to store before POSTing to avoid getting ratelimited
Default: 5
const log = new Logger("name", { web: { every: 5 }}).loggersThis logger allows you to add your own levels, following out format. Formatted the following:
const log = new Logger("name", {}, { name: "level", colour:"red" }).loggers
// **OR**
const log = new Logger("name", {}, [{ name: "level", colour:"red" }]).loggersThe colour should be derived from the package console-log-colors or from a slimmed list included in the types.
Warning
This will overwrite the default levels, so make sure you redefine them if you need them, and are just making an extra few.
Note
If you require the default levels back, then use:
new Logger("name", {}, [
{ name: "trace", colour: "cyanBright" },
{ name: "debug", colour: "blueBG" },
{ name: "info", colour: "blue" },
{ name: "warn", colour: "yellow" },
{ name: "error", colour: "red" },
{ name: "fatal", colour: "redBG" },
// Your levels here...
]).loggersThe logger allows you to pass custom functions or callbacks to handle the logs on your own.
const function = (level: number, ...data: any[]) => {
return { level, data }
}
const log = new Logger("name", { funcs: function}).loggers
// **OR**
const log = new Logger("name", { funcs: [function]}).loggers