nest-express-winston
Implementation of a NestJS logger using winston
and express-winston
. It replaces the default
NestJS logger with winston
, and optionally also adds express logs using express-winston
.
Getting Started
yarn install
yarn build
yarn test
Installation
yarn add @minddocdev/nest-express-winston
If it does not exist, add a .yarnrc
file to the root of your project with the following content:
"@minddocdev:registry" "https://npm.pkg.github.com"
Ensure you are logged in to github using a personal access token with
delete:packages, read:packages, repo, write:packages
privileges as the password:
npm login --registry=https://npm.pkg.github.com
Publishing
To publish a new version of the package, firstly bump the version in the package.json
file,
then cut a new release on Github.
This will automatically initiate the publish
Github Action workflow and publish a new version to
Github Packages
Guide
import {
createExpressWinstonHandler,
createNestWinstonLogger,
httpContextMiddleware,
requestIdHandler,
} from '@minddocdev/nest-express-winston';
Basic Example
Add the following to your index.ts
/ main.ts
:
import 'dotenv/config';
import 'module-alias/register';
import 'reflect-metadata';
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import {
createExpressWinstonHandler,
createNestWinstonLogger,
httpContextMiddleware,
requestIdHandler,
} from '@minddocdev/nest-express-winston';
import { AppModule } from './app.module';
import { EnvService } from './env';
async function bootstrap() {
const nestWinstonLogger = createNestWinstonLogger('app');
const app = await NestFactory.create(AppModule, { logger: nestWinstonLogger });
// Use express-winston for logging request information
const expressWinstonHandler = createExpressWinstonHandler(nestWinstonLogger.logger);
app.use(expressWinstonHandler);
// Use express-http-context for context injection (request id)
app.use(httpContextMiddleware);
app.use(requestIdHandler);
app.useGlobalPipes(new ValidationPipe());
app.setGlobalPrefix(EnvService.get().API_BASE_PATH);
const options = new DocumentBuilder()
.setTitle('API')
.setDescription('Logging API Example')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api', app, document);
await app.listen(EnvService.get().API_PORT, EnvService.get().API_HOST);
}
bootstrap();
Contribution Guidelines
Never commit directly to master, create a new branch and submit a pull request.