我使用create-next-app创建了一个带有typescript的Next.js项目。对于这个特定项目的日志记录,我决定使用Pino日志库,因为它是Next.js本身推荐的。
当我使用没有传输功能的Pino时,它运行得非常好。下面是pino的定义代码,它运行得很好:
import pino from 'pino';
const logger = pino({
level: process.env.NEXT_PUBLIC_LOG_LEVEL,
formatters: {
level: (label) => {
return { level: label.toUpperCase() };
},
bindings: (bindings) => {
return { host: bindings.hostname };
},
},
});
export default logger;
但是当我使用Pino传输时,下面提到的代码(我已经安装了pino-pretty作为dev依赖项):
import pino from 'pino';
const logger1 = pino({
transport: {
target: 'pino-pretty',
},
});
logger1.info('hi');
export default logger1;
我得到下面提到的错误
- error uncaughtException: Error: Cannot find module 'C:\starttwo-productionlot-frontend\.next\server\app\home\lib\worker.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
at Module._load (node:internal/modules/cjs/loader:920:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at MessagePort.<anonymous> (node:internal/main/worker_thread:164:24)
at [nodejs.internal.kHybridDispatch] (node:internal/event_target:737:20)
at exports.emitMessage (node:internal/per_context/messageport:23:28) {
digest: undefined
}
- error node_modules\thread-stream\index.js (195:31) @ Worker.onWorkerExit
- error uncaughtException: Error: the worker thread exited
at Worker.onWorkerExit (webpack-internal:///(sc_server)/./node_modules/thread-stream/index.js:163:34)
at Worker.emit (node:events:513:28)
at [kOnExit] (node:internal/worker:289:10)
at Worker.<computed>.onexit (node:internal/worker:209:20)
at Worker.callbackTrampoline (node:internal/async_hooks:130:17) {
digest: undefined
}
我也得到了同样的错误(这里我有一个问题,我们需要使用npm安装pino/file吗?):-
import pino from 'pino';
const transport = pino.transport({
target: 'pino/file',
options: { destination: '/path/to/file' }
})
pino(transport)
我使用的记录器在服务器端,这是唯一的next.js页.tsx文件谁没有“使用客户端”指令可以请我解决这个错误
我试着实现pino官方文档中提供的示例代码,但我得到了同样的上述错误,代码如下:-
在我的-运输。tsx:-
import { createWriteStream } from 'fs'
export default () => {
return createWriteStream('.../app/app.log)')// /app/app.log -- location of log file
}
在logger.tsx中:-
const pino = require('pino')
const transport = pino.transport({
target: '/absolute/path/to/my-transport.mjs'
})
export default pino(transport)
在next.js中使用pino.transport()有什么限制吗?我们可以在客户端和服务器端使用它吗?如何在pino中使用传输功能?
1条答案
按热度按时间u7up0aaq1#
您有
.../path/
而不是../path/
(一个.
太多)但这并不能解决问题。
解决方案
您在Web服务器上。你不能用Next.js导航到比web服务器的根目录更远的地方,除非你配置了一个自定义服务器(这是可能的),更多信息在这里:
Configuring custom server
GitHub discussion: custom root approach mentioned
你应该
.gitignore
.next
目录,所以无论你尝试什么,你应该把它放在另一个目录。如果文件位于webservers根目录中,则:
建议: