@payk/nestjs-winston
Advanced tools
Weekly downloads
Readme
Winston for NestJS has never been this easy!
npm install --save @payk/nestjs-winston
This package not only wraps winston into a Nest Module like other packages, it also creates a Nest LoggerService, so you can keep using the default NestJS logger, which enjoying winston. But that's not all, it also takes those great things from the NestJS Logger. It adds the context into the winston meta (so it can later be search and indexed in your ELK/Datadog).
Another great feature is the winston formatter add to the class that in local mode allows easy and readable logs to the console.
Import WinstonModule
and use the forRoot()
method to configure it. This method accepts the same options object as createLogger()
function from the winston package:
import { Module } from '@nestjs/common';
import { WinstonModule } from '@payk/nestjs-winston';
import * as winston from 'winston';
@Module({
imports: [
WinstonModule.forRoot({
// options here
}),
],
})
export class AppModule {}
Caveats: because the way Nest works, you can't inject dependencies exported from the root module itself (using
exports
). If you useforRootAsync()
and need to inject a service, that service must be either imported using theimports
options or exported from a global module.
Maybe you need to asynchronously pass your module options, for example when you need a configuration service. In such case, use the forRootAsync()
method, returning an options object from the useFactory
method:
import { Module } from '@nestjs/common';
import { WinstonModule } from '@payk/nestjs-winston';
import * as winston from 'winston';
@Module({
imports: [
WinstonModule.forRootAsync({
useFactory: () => ({
// options
}),
inject: [],
}),
],
})
export class AppModule {}
The factory might be async, can inject dependencies with inject
option and import other modules using the imports
option.
If you want to use winston logger across the whole app, including bootstrapping and error handling, use the following:
Define:
import { WINSTON_MODULE_NEST_PROVIDER } from '@payk/nestjs-winston';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
}
bootstrap();
Use:
import { WinstonLogger } from '@payk/nestjs-winston';
export class ClassName {
private readonly logger = new WinstonLogger(ClassName.name);
}
To allow a better visibility a unique formatter is provided
import { winstonConsoleFormat } from '@payk/nestjs-winston';
WinstonModule.forRoot({
level: 'info',
//format: winston.format.json(),
defaultMeta: { service: 'user-service' },
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.colorize({ all: true }),
winstonConsoleFormat
)
})
]
})
FAQs
Winston for Nest has never been this easy
The npm package @payk/nestjs-winston receives a total of 498 weekly downloads. As such, @payk/nestjs-winston popularity was classified as not popular.
We found that @payk/nestjs-winston demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.