我使用 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;
Run Code Online (Sandbox Code Playgroud)
但是当我使用 Pino 传输时,代码如下所示(我已安装 pino-pretty 作为开发依赖项):-
import pino from 'pino';
const logger1 = pino({
transport: {
target: 'pino-pretty',
},
});
logger1.info('hi');
export default logger1;
Run Code Online (Sandbox Code Playgroud)
我收到下面提到的错误
- error uncaughtException: …
Run Code Online (Sandbox Code Playgroud) 我将 NestJS v9 与 Express 适配器和@nestjs/graphql
库一起使用,并且在从 graphql 请求中提取标头并使用 pino 日志库将其附加到日志消息时遇到问题。
下面是我的 LoggerModule
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule as PinoLoggerModule } from 'nestjs-pino';
@Module({
imports: [
PinoLoggerModule.forRootAsync({
imports: [ConfigModule.forRoot({ isGlobal: true })],
useFactory: async (configService: ConfigService) => ({
isGlobal: true,
pinoHttp: {
level: process.env.LOG_LEVEL || 'info',
redact: configService.get<string[]>('logger.redact.fields'),
transport: {
target: 'pino-pretty',
options: {
colorize: false,
singleLine: true,
levelFirst: false,
translateTime: "yyyy-mm-dd'T'HH:MM:ss.l'Z'",
messageFormat: '{req.headers.x-correlation-id} [{context}] {msg}',
ignore: 'pid,hostname,context,req,res.headers', …
Run Code Online (Sandbox Code Playgroud)pino ×2
express ×1
graphql ×1
javascript ×1
nestjs ×1
next.js ×1
next.js13 ×1
pinojs ×1
typescript ×1