feel-logger
v2.1.9
Published
Default winston logger configuration, with console and daily rotate file transports.
Downloads
26
Maintainers
Readme
Feel Logger
This is my default configuration for winston logger.
Table of contents
- Motivation
- Quick Start
- Outpu Format
- Configuration
- Dynamic Initialization
- Logger Interface
- Loggin Context
- Logger Instance
- Wisnton Instance
Motivation
Winston
is an incredible and versatile logging library. To simplify the configuration process and keep the logs consistent across projects, i decided to create this package to easily setup winston with my formats and configurations.
This package has two default transports: Console
and Dayle Rotate File
.
Quick Start
You just need to import Logger
and call the init
method and a Console
logger will be created.
import { Logger } from 'feel-logger';
Logger.init();
Logger.info('My Awesome Logger!');
// output: 2020-07-12 13:43:05 [Application] INFO: My Awesome Logger!
To activate the Daily Rotate File
just pass a configuration object
to init
method.
import { Logger } from 'feel-logger';
Logger.init({ file: true });
Logger.info('My Awesome Logger!');
This will create a /logs
folder in the project root and store there the logs files.
Output Format
The output format is composed by a timestamp
, a identifier label
, the log level
, the log message
and the associated metadata
.
YYYY-MM-DD HH:MM:SS [label] LEVEL: message Meta: ...
Configuration
The configurations accepted by the Logger are:
| property | type | default | description |
| --------------- | --------------------------------- | ------------------------------ | ----------------------------------------- |
| name | string | Application | this will be the label
|
| level | string | info | the log level |
| exitOnError | boolean | false | |
| handleException | boolean | false | |
| transports | Winston.Transports[]
| Console
, Daily Rotate File
| custom transports to be add to the Logger |
| file | boolean | false | active Dayle Rotate File
transport |
| fileOptions | DailyRotateFileTransportOptions
| null | overrides default transport options |
| console | WinstonLoggerOptions
| null | overrides default transport options |
Dynamic Initialization
To make the Logger instance static
across the application you have to create a logger.options
file. When the lib is loaded by node it will be search for a configuration file (.js or .ts) in the project. This dynamic initialization overrides init
method.
+-- root
| +-- src
| | +-- configuration.options.[ts|js]
| +-- package.json
The configuration file accepts the same object as the init
method, but make sure that your logger.options.[ts|js]
is inside a src
folder under the root
directory and follow the conventions:
/* logger.options.js */
module.exports = {
file: true,
};
/* logger.options.ts */
export default {
file: true,
};
Now you can import Logger
in any file and use without pass through injection.
/* AccountController */
import { Logger } from 'feel-logger';
export class AwesomeClass {
AwesomeMethod() {
Logger.info('Awesome Method Called');
}
}
Logger Interface
The following is the methods for logging:
interface LoggerOperations {
log: (level: string, message: string) => void;
info: (message: string, ...meta: unknown[]) => void;
warning: (message: string, ...meta: unknown[]) => void;
error: (message: string, ...meta: unknown[]) => void;
debug: (message: string, ...meta: unknown[]) => void;
}
Logging Context
If you want to add a context information to the output log you can pass a special metadata called context
and it will be add to the label
part of the log.
import { Logger } from 'feel-logger';
Logger.info('My Awesome Logger', { context: 'MyContext' });
// output: 2020-07-12 14:42:29 [Application - MyContext] INFO: My Awesome Logger
Logger Instance
If you initialize your Logger
dynamically, you can create instances of the logger to set a default context
.
import { Logger } from 'feel-logger';
const logger = Logger.createLoggerInstance('MyDefaultContext');
logger.info('My Awesome Logger');
// output: 2020-07-12 14:47:31 [Application - MyDefaultContext] INFO: My Awesome Logger
You can pass a class
type as well.
import { Logger } from 'feel-logger';
export class MyAwesomeClass {
logger = Logger.createLoggerInstance(MyAwesomeClass);
log() {
this.logger.info('My Awesome Logger');
}
}
new MyAwesomeClass().log();
// output: 2020-07-12 14:47:31 [Application - MyAwesomeClass] INFO: My Awesome Logger
Winston Instance
You can get the winston
instance object by calling the method:
import { Logger } from 'feel-logger';
const winston = Logger.getWinstonInstance();