Comments (5)
Hi, let's see if @vorotech can help, he made some changes to the logging system a few days ago.
from nest-winston.
hi @MegaRoks will try to reproduce
from nest-winston.
I can reproduce and think it's misconfiguration. Might be README need to be adjusted slightly. Take a look at the existing example:
// src\logger\interceptor\logger.interceptor.ts
import { Logger } from 'winston';
...
@Injectable()
export class LoggerInterceptor implements NestInterceptor {
constructor(@Inject(WINSTON_MODULE_PROVIDER) private logger: Logger) {}
...
And
// src\logger\winston.config.ts
...
transports: [
new transports.Console({
format: format.combine(format.timestamp(), utilities.format.nestLike()),
...
The problem here is that you inject the instance of the Winston Logger, which doesn't use the nest-winston Logger to format message. So the utilities.format.nestLike()
cannot output it properly.
This can be fixed in few ways.
Stay with a Winston Logger
If you want to use Winston logger the configuration Console transport formater should be adjusted, e.g. format: winston.format.json()
[Nest] 22444 - 18.09.2020, 21:29:16 [NestApplication] Nest application successfully started +2ms
{
timestamp: '2020-09-18T18:29:16.931Z',
method: 'GET',
route: '/',
data: { body: {}, query: {}, params: {} },
from: '::1',
madeBy: null
}
{"message":{"timestamp":"2020-09-18T18:29:16.931Z","method":"GET","route":"/","data":{"body":{},"query":{},"params":{}},"from":"::1","madeBy":null},"level":"info"}
Use Winston Nest Logger
// src\logger\interceptor\logger.interceptor.ts
import { ..., LoggerService } from '@nestjs/common';
...
@Injectable()
export class LoggerInterceptor implements NestInterceptor {
constructor(
@Inject(WINSTON_MODULE_NEST_PROVIDER) private readonly logger: LoggerService
) {}
The message would be processed by Nest Logger classes and gives the following output in combination with nestLike format:
[Nest] 28216 - 18.09.2020, 21:33:19 [NestApplication] Nest application successfully started +2ms
{
timestamp: '2020-09-18T18:33:19.703Z',
method: 'GET',
route: '/',
data: { body: {}, query: {}, params: {} },
from: '::1',
madeBy: null
}
[NestWinston] Info 18.09.2020, 21:33:19 - {"method":"GET","route":"/","data":{"body":{},"query":{},"params":{}},"from":"::1","madeBy":null}
Compromise solution
According to Winston documentation the transport can accept info
object, every info
must have at least the level and message properties.
You can provide the missed message
property with the data ={}
object, and get the message prepared by native Winston Logger which nestLike formatter can print.
// src\logger\interceptor\logger.interceptor.ts
...
const data = {
message: 'Request intercepted',
timestamp: new Date().toISOString(),
method: req.method,
route: req.route.path,
data: {
body: body,
query: req.query,
params: req.params,
},
from: req.ip,
madeBy: userEmail,
};
console.log(data);
this.logger.info(data);
[Nest] 18340 - 18.09.2020, 21:39:23 [NestApplication] Nest application successfully started +2ms
{
message: 'Request intercepted',
timestamp: '2020-09-18T18:39:25.514Z',
method: 'GET',
route: '/',
data: { body: {}, query: {}, params: {} },
from: '::1',
madeBy: null
}
[NestWinston] Info 18.09.2020, 21:39:25 Request intercepted - {"method":"GET","route":"/","data":{"body":{},"query":{},"params":{}},"from":"::1","madeBy":null}
As you can see the message
is important bit here.
from nest-winston.
@vorotech thanks for your time. If this is a documentation fault feel free to open a PR to improve it!
from nest-winston.
@vorotech Thanks for the answer and explanation.
from nest-winston.
Related Issues (20)
- Update to allow nest ^9.0.0 HOT 1
- nest-winston v1.6.3 has runtime error ERR_REQUIRE_ESM HOT 11
- Extend the log methods HOT 4
- Log unhandled exceptions in readable form HOT 3
- WinstonLogger suggestions HOT 2
- Write after end node error with winston and nest-winston logger HOT 4
- TypeError: Cannot destructure property 'message' of 'message' as it is null
- Logging NestJS request details with every log? HOT 4
- "Unknown logger level" error when used for bootstraping HOT 3
- Nest can't resolve dependencies HOT 8
- Default context per service (configurable injection scope) HOT 3
- Passing winston logger instance to forRoot doesn't work HOT 2
- [Bug]: Creating multiple winston modules using child winston loggers use the last created winston module when using the nestjs Logger constructor HOT 2
- Adding "level" argument to log method HOT 2
- NestLike ConsoleFormat always contains stringifiedMeta and essentially logs message twice HOT 7
- LoggerService interface changed with Nest v8 HOT 2
- Is there a way to create a child logger? HOT 2
- How can I pass json attributes into the logger? HOT 3
- Support for @nestjs/common 10.0.0 in Peer Dependencies HOT 2
- [Question]: Should documentation be updated? HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nest-winston.