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-exact
Whenever 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 }}).loggers
The 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 }}).loggers
Whether 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 }}).loggers
Whether to format and colourise any JSON output
Default: false
const log = new Logger("name", { console: { format: false }}).loggers
Whether 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 }}).loggers
WARNING: 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 }}).loggers
The 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 }}).loggers
How to name the files
Default: null
The type of file stored
Default: json
const log = new Logger("name", { files: { type: "json" }}).loggers
WARNING: 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 }}).loggers
The URL to post to
Default: null
const log = new Logger("name", { web: { url: null }}).loggers
The data type sent
Default: json
const log = new Logger("name", { web: { type: "json" }}).loggers
How many logs to store before POSTing to avoid getting ratelimited
Default: 5
const log = new Logger("name", { web: { every: 5 }}).loggers
This logger allows you to add your own levels, following out format. Formatted the following:
const log = new Logger("name", { levels: { name: "level", colour:"red" }}).loggers
// **OR**
const log = new Logger("name", { levels: [{ name: "level", colour:"red" }]}).loggers
The colour should be derived from the package console-log-colors or from a slimmed list included in the types.
Also, you are able to overwrite existing functions. For example, you could overwrite the info logger level by redefining it.
The 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