Winston integration with microframework
npm install microframework-winstonnpm install microframework-winston --save
typings install
npm install es6-shim --save
require("es6-shim"); in your app.
javascript
import {MicroFrameworkBootstrapper} from "microframework/MicroFrameworkBootstrapper";
import {WinstonModule} from "microframework-winston/WinstonModule";
new MicroFrameworkBootstrapper({ baseDirectory: __dirname })
.registerModules([
// ... your other modules ...
new WinstonModule()
])
.bootstrap()
.then(result => console.log('Module is running. Logging is available now.'))
.catch(error => console.error('Error: ', error));
`
2. Add configuration section to your microframework's configuration:
`json
{
"winston": {
"defaultLogger": {
"transports": {
"console": {
"colorize": true,
"prettyPrint": true
},
"file": {
"prettyPrint": true,
"logstash": true,
"filename": "logs.log"
}
}
}
}
}
`
This configuration will add two winston transports: console and file, you can add/remove transports.
For more options on "transports" please take a look winston documentation
here and
here.
3. Now you can inject winston logger instance in your classes:
`javascript
export class UserRepository {
private logger: LoggerInstance;
constructor(@Logger() logger: LoggerInstance) {
this.logger = logger;
}
find() {
this.logger.info('Users has been found');
}
save() {
this.logger.info('User has been saved');
}
remove() {
this.logger.error('Sorry, cannot remove given user');
}
}
`
Using multiple loggers
You can use multiple loggers. To do so, you need to define extra loggers in the configuration:
`json
{
"winston": {
"defaultLogger": {
"transports": {
"console": {
"colorize": true,
"prettyPrint": true
},
"file": {
"prettyPrint": true,
"logstash": true,
"filename": "logs.log"
}
}
},
"loggers": [{
"name": "consoleLogger",
"transports": {
"console": {
"prettyPrint": true,
"colorize": true
}
}
},{
"name": "fileLogger",
"transports": {
"file": {
"prettyPrint": true,
"logstash": true,
"filename": "logs.log"
}
}
}]
}
}
`
This configuration will create 3 loggers: default, consoleLogger and fileLogger.
You will be able to inject them by specifying a name parameter to @Logger decorator:
`javascript
constructor(@Logger() defaultLogger: LoggerInstance,
@Logger('consoleLogger') consoleLogger: LoggerInstance,
@Logger('fileLogger') fileLogger: LoggerInstance) {
this.defaultLogger = defaultLogger;
this.consoleLogger = consoleLogger;
this.fileLogger = fileLogger;
}
``