示例说明
用 Pino 配置结构化日志,高性能 JSON 输出,带子日志器。本示例属于命令行工具场景,提供可直接复制使用的typescript代码片段,附带边界条件与使用注意事项。
技术要点
- Pino 异步高性能 JSON 日志
- child 创建子日志器绑定上下文
- requestLogger 中间件记录请求耗时
代码解读
上述代码实现了带 Pino 的结构化日志的核心逻辑。用 Pino 配置结构化日志,高性能 JSON 输出,带子日志器。代码中包含输入校验、核心算法和结果返回三个部分。关键在于正确处理边界情况,例如空输入、非法参数和并发场景。Pino 异步高性能 JSON 日志,child 创建子日志器绑定上下文。这些设计确保代码在生产环境中的健壮性。
使用建议
在实际项目中使用本示例时,建议先理解带 Pino 的结构化日志的适用场景与限制条件。requestLogger 中间件记录请求耗时。根据具体业务需求调整参数配置,并编写单元测试覆盖正常路径与边界情况。本代码片段可直接集成到现有项目中,或作为参考实现自行扩展。
代码示例
import pino from'pino';export function createLogger({level='info',service='app',version='1.0.0'}={}){return pino({level,timestamp:pino.stdTimeFunctions.isoTime,formatters:{level(label){return{level:label};}},bindings:{service,version}});}export function childLogger(parent:pino.Logger,context:Record<string,unknown>){return parent.child(context);}export function requestLogger(logger:pino.Logger){return(req:{id:string;method:string;url:string},res:{statusCode:number},next:()=>void)=>{const start=Date.now();next();logger.info({reqId:req.id,method:req.method,url:req.url,status:res.statusCode,duration:Date.now()-start},'request completed');};}