here is an invasive logging library that hooks into the global console object to enable logging with different transports and formatting.
npm install @zzkit/xlog
To start logging, instantiate the Logger class with configuration options:
import { Logger, transports, filters, formatters } from '@zzkit/xlog';
const logger = new Logger({
transports: [
new transports.console(),
new transports.dailyFile({
filename: (date) => `./logs/log-${date.toISOString().split('T')[0]}.log`
})
],
formatters: [formatters.simple],
});
This will log to the console and daily log files.
Then you can use the regular console
methods for logging:
console.log('Hello world!');
console.debug('Debug message');
The Logger
constructor takes a configuration object with the following properties:
-
transports
- Array ofTransport
instances for handling logs -
formatters
- Array ofLogFormatter
functions for transforming log data -
hidden_orig_console
- Whether to suppress logs from the original console (default false)
-
transports.console
- Logs to console -
transports.file
- Logs to a file -
transports.dailyFile
- Logs to daily file, removes old files
-
formatters.log.label
- Adds label data to log -
formatters.log.secret
- Hidden secret pattern in message
-
formatters.transport.line1_colorize
- Colorized single line log -
formatters.transport.line1
- Single line log -
formatters.transport.apache
- Apache common log format -
formatters.transport.json
- JSON format -
formatters.transport.json_no_stack
- JSON without stack trace
You can filter logs by log level:
import { filters } from '@zzkit/xlog';
// Only log warnings and errors
const logger = new Logger({
transports: [
new transports.console({
filter: filters.not_level(LogLevels.info)
})
]
});
see file ./demo1.ts.
MIT