Code Monkey home page Code Monkey logo

Comments (6)

iamolegga avatar iamolegga commented on May 24, 2024 1

Assign works just fine in scope of controller, but how to assign meta info in decorator or guard?
I simple cannot access logger instance from controller in decorator.

I'm not sure this library have tests for assignment in decorators. If that's not declared as a feature I believe you can open a feature request. But before opening it in the current library I would check if nestjs support loggers in custom decorators first

Existing example does not represent real usage, nobody will assign userId meta in each controller, agree?

  1. I'm not entitled to speak on behalf of every user of this library. But there is not only userId which you can add to logs. That's just a simple example to demonstrate a use case.
  2. That assignment works not only in controllers but services too. So please don't think that everyone uses it the same way you do it.

I managed to pass userId meta in customProps of pinoHttp from request but i managed to get userId only in complete request message, all messages between request and response do not have that meta.

If you think there is a bug the first thing you can do is check tests of this library. If that doesn't help feel free to open a bug report with MINIMAL example repo

from nestjs-pino.

iamolegga avatar iamolegga commented on May 24, 2024

I didn't get the question. Are you going to use the logger as a transport for userId between layers?

from nestjs-pino.

MikeKoval avatar MikeKoval commented on May 24, 2024

no.
I have controller that looks like this (simplified versions)

import { PinoLogger } from 'nestjs-pino';
import Auth from "./common/decorators/auth.decorator";

export class AppController {
  constructor(private logger: PinoLogger) {}

  @Get()
  async getHealthcheck(@Auth() user) {
    this.logger.info('test_from_controller');
    return {
      ok: true
    }
  }
}

and i have decorator that looks like this

import {
  createParamDecorator,
  ExecutionContext,
} from '@nestjs/common';

export default createParamDecorator(
  async (data: string, ctx: ExecutionContext) => {
  const user = { id: 1 };
    return user;
  },
);

i want to get test_from_controller message in logs with userId: 1 meta, but i dont want to "assign" userId in each controller method as there might be many of them, i want to assign that meta inside decorator or some another implementation where its assigned once.

from nestjs-pino.

MikeKoval avatar MikeKoval commented on May 24, 2024

Thank you!

from nestjs-pino.

iamolegga avatar iamolegga commented on May 24, 2024

i want to get test_from_controller message in logs with userId: 1 meta, but i dont want to "assign" userId in each controller method as there might be many of them, i want to assign that meta inside decorator or some another implementation where its assigned once.

The simplest solution is pass serializers field in config:

  serializers: {
    req: (req) => {
      // take it from session or headers or whatever where you keep it
      // just be sure that logger middleware works after your session/auth middleware
      // if it has to be done before getting access to that field
      req.userId = req.raw.session?.user.id || null,
      return req;
    },
  },

Does it help?

from nestjs-pino.

iamolegga avatar iamolegga commented on May 24, 2024

No response, closing

from nestjs-pino.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.