How to use nestjs Logging service
Best practice
Better than accessing the Logger
statically is to create an instance for your class:
@Controller()
export class AppController {
private readonly logger = new Logger(AppController.name);
@Get()
async get() {
this.logger.log('Getting stuff');
}
}
Why is this better?
-
You can provide a context in the constructor like
new Logger(AppController.name)
so that the class name (or anything else) will be part of all log messages in this class. -
If you at some point want to extend or replace the default
LoggerService
, you do not need to change any of your application code besides setting the new logger. Your new logger will automatically be used. If you access it statically it will continue to take the default implementation.
const app = await NestFactory.create(AppModule, {logger: new MyLogger()});
- You can mock the
Logger
in your tests:
module.useLogger(new NoOpLogger());
You need to import first into your class:
import { Logger } from '@nestjs/common';
and then you can begin with logging:
Logger.log('info')
Logger.warn('warning')
Logger.error('something went wrong! ', error)
The answer is simple. There are static methods on the Logger class.
e.g.
static log(message: string, context = '', isTimeDiffEnabled = true)
Usage:
Logger.log('Only a test');