pino icon indicating copy to clipboard operation
pino copied to clipboard

Error: unable to determine transport target for "@baselime/pino-transport"

Open jacobsamo opened this issue 1 year ago • 3 comments

For some reason getting the below error, works fine in development but not when built.

⨯ Error: unable to determine transport target for "@baselime/pino-transport"
    at fixTarget (/var/task/node_modules/pino/lib/transport.js:159:13)
    at /var/task/node_modules/pino/lib/transport.js:97:17
    at Array.map (<anonymous>)
    at Function.transport (/var/task/node_modules/pino/lib/transport.js:94:59)
    at /var/task/apps/web/.next/server/app/recipes/preview/[id]/edit/page.js:11:7702
    at 62666 (/var/task/apps/web/.next/server/app/recipes/preview/[id]/edit/page.js:11:7739)
    at t (/var/task/apps/web/.next/server/webpack-runtime.js:1:143)
    at 50073 (/var/task/apps/web/.next/server/app/recipes/preview/[id]/edit/page.js:11:4815)
    at t (/var/task/apps/web/.next/server/webpack-runtime.js:1:143)
    at 3724 (/var/task/apps/web/.next/server/app/recipes/preview/[id]/edit/page.js:11:5969) {
  page: '/recipes/preview/acffe450-7ce2-4a56-be89-1a8c985ce966/edit'
}

My logger code: https://github.com/jacobsamo/Mixie/blob/mix-170-mvp-bug-fixes/apps/web/src/lib/services/logger/create-logger.ts

import { env } from "env";
import type { TransportTargetOptions } from "pino";
import pino from "pino";

export function createLogger({ dataset }: { dataset: string }) {

  const transport = pino.transport({
    target: "@baselime/pino-transport",
    options: {
      baselimeApiKey: env.BASELIME_KEY,
      dataset,
    },
  });

  return pino(transport);
}

Feel like I could fix this with a webpack config change or similar.

Repo link: https://github.com/jacobsamo/Mixie/tree/mix-170-mvp-bug-fixes

Similar issue to: #1964

jacobsamo avatar Jul 31 '24 09:07 jacobsamo

I have exactly the same problem and made a small project to reproduce the error: https://github.com/ustad-nordin/axiom-error

I hope someone take a look it and see what the problem is.

ustad-nordin avatar Aug 04 '24 16:08 ustad-nordin

Considering how Vercel or Netlify works, it's better to load the transport as a stream, and use it in the main process. You'll only have problems in using a different thread in serverless systems.


The problem stems from the fact that threads requires an entrypoint on disk. When bundling, the logic we use to determine which file to load is somewhat broken. There are some example on how to do that for webpack, but none for vite. One would really be helpful.

mcollina avatar Sep 26 '24 17:09 mcollina

you need to import the package to the file otherwise it may be stripped out in prod build

import "@baselime/pino-transport"

Also in nextjs I solved this by adding the package to the serverComponentsExternalPackages

const nextConfig = {
    output: "standalone",
    experimental: {
        instrumentationHook: process.env.DEPLOYMENT !== "test",
        serverComponentsExternalPackages: [
            "pino",
            "pino-pretty",
            "pino-opentelemetry-transport",
            "kafkajs",
            "@opentelemetry/instrumentation-pino",
            "@opentelemetry/instrumentation-kafkajs",
            "@baselime/pino-transport"
        ],
        ...

Hope it helps

filmon-arefayne avatar Dec 22 '24 10:12 filmon-arefayne