metcoder95 / cloud-pine

Pino Transport abstraction for Google Cloud Logging
MIT License
12 stars 2 forks source link

Using `logOptions` with the `defaultWriteDeleteCallback` causes a crash. #71

Open MoamenQodeup opened 2 months ago

MoamenQodeup commented 2 months ago

Describe the bug Process crashed with error

node:internal/worker:266
    this[kPort].postMessage({
                ^
DOMException [DataCloneError]: (error) => {
                        if (error) {
                            console.error("failed to write to...<omitted>... } could not be cloned.
    at new DOMException (node:internal/per_context/domexception:53:5)
    at new Worker (node:internal/worker:266:17)
    at createWorker (/app/node_modules/.pnpm/thread-stream@2.7.0/node_modules/thread-stream/index.js:55:18)
    at new ThreadStream (/app/node_modules/.pnpm/thread-stream@2.7.0/node_modules/thread-stream/index.js:230:19)
    at buildStream (/app/node_modules/.pnpm/pino@8.21.0/node_modules/pino/lib/transport.js:21:18)
    at transport (/app/node_modules/.pnpm/pino@8.21.0/node_modules/pino/lib/transport.js:116:10)
    at normalizeArgs (/app/node_modules/.pnpm/pino@8.21.0/node_modules/pino/lib/tools.js:316:16)
    at pino (/app/node_modules/.pnpm/pino@8.21.0/node_modules/pino/pino.js:90:28)

To Reproduce

setting log options

 logOptions: {
          defaultWriteDeleteCallback: (error: unknown) => {
            if (error) {
              console.error("failed to write to Google Cloud Logging", { error });
            }
          },
        } as unknown as CloudPineOptions["cloudLoggingOptions"]["logOptions"],

Expected behavior Passing logOptions with defaultWriteDeleteCallback should work

Additional context The failure happens before invoking CloudPine contructor.

metcoder95 commented 2 months ago

Hmm, this is hard; the error is somehow expected, functions/methods cannot be transferred between Worker Threads due to serialization. For instance, structuredClone algorithm throws as expected.

I believe that sadly we would need to drop that function unless we found a workaround

MoamenQodeup commented 2 months ago

Hmm, this is hard; the error is somehow expected, functions/methods cannot be transferred between Worker Threads due to serialization. For instance, structuredClone algorithm throws as expected.

I believe that sadly we would need to drop that function unless we found a workaround

Thanks for taking the time checking this one, I believe I will have to fork the repo and integrate the handling directly into it.

metcoder95 commented 2 months ago

If you find a way to extend it, please feel free to submit a PR for it do add it into the lib. Happy to support for that 👍