sainsburys-tech / next-logger

JSON logging patcher for Next.js
MIT License
176 stars 14 forks source link

Usage in TypeScript? #80

Open cklat opened 1 month ago

cklat commented 1 month ago

Hi,

I came across this library due to all the limitation NextJS has with logging and trying to use it in my TypeScript. Unfortunately, not successful.

What I have tried is to follow the example for the custom logging in the documentation and use it like I would normally use the Pino Logger like so:

//next-logger.config.ts

import pino from 'pino';

const logger = (defaultConfig: any) =>
    pino({
        ...defaultConfig,
        formatters: {
            level: (label) => {
                return { level: label };
            },
        },
    }, pino.destination(`${__dirname}/logs/logfile.log`));

export default {
    logger,
};

//random-usage-file.ts

import logger from './next-logger.config';

logger.info('Some debug log');

However, I'm getting the following: Property 'info' does not exist on type '{ logger: (defaultConfig: any) => Logger<never, boolean>; }'

Any ideas how to get this to work?

dir commented 1 month ago

From my personal experience messing around with it a bit, this package seems to be very TypeScript-unfriendly.

atkinchris commented 1 month ago

We exclusively use this with TypeScript projects internally, so I'm disappointed to see you're facing issues. Because of when we need to patch Next.js in the applications lifecycle, this doesn't lend itself well to being compiled with TypeScript or referenced back into TypeScript projects.

Generally, we'd import the Pino config into this next-logger.config file, rather than it being the source of truth for Pino's config. You may need to reference the compiled output directly - as this happens at runtime, and isn't compiled.

cklat commented 1 month ago

@atkinchris

I'm not sure if I follow you, sorry.

Is it possible that you can provide some example code that shows what you mean and may fix the above error I'm encountering?

Appreciate it, thanks!

edit//

My use case and thus my implementation has a little changed but the problem still persists. I',m trying to achieve a logging with a context propagation. For this I'm trying to incorporate the NodeJS Async Local Storage.

My files look the following:

[...]

I have found the mistake. In the end, it was nothing related to the error I had in my original post. Sorry for the trouble.