You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用SSR的SvelteKit项目SSR与客户端统一日志方案选型咨询

启用SSR的SvelteKit项目适配日志方案推荐

首选方案:Pino 搭配同构封装

Pino 是当前 Node.js 生态性能最优的结构化日志库之一,天然适配 SvelteKit 的同构运行模式,无需复杂配置即可覆盖你提出的所有要求:

  • 可配置日志级别:默认支持 trace/debug/info/warn/error/fatal 共6个级别,支持全局、分运行环境单独配置,生产环境可直接调高级别过滤调试日志
  • 服务端(Node.js adapter)输出兼容:SSR 运行时默认输出到标准输出(stdout),也可通过 pino/file 传输器直接写入本地日志文件,完全适配 Docker、PM2 等常规部署场景的日志采集规则
  • 客户端日志自动适配:通过简单的运行环境判断,客户端侧自动降级为原生控制台输出,不会把服务端相关的文件写入逻辑打包进客户端产物
  • 诊断功能齐全:自带时间戳、结构化字段记录,搭配 pino-pretty 工具可实现终端着色、格式化输出,生产环境也可直接输出 JSON 格式方便后续日志平台解析

Winston 适配方案(熟悉 Winston 可直接使用)

你已知晓的 Winston 完全可以适配 SvelteKit 的运行模式,仅需做简单的同构兼容处理即可:

  • 服务端运行时正常初始化 Winston 实例,配置 stdout、文件输出传输器,按需设置日志级别、时间戳、着色规则
  • 通过 import.meta.env.SSR 变量判断运行环境,客户端侧直接降级为原生 console 输出,复用同一套日志调用 API
  • 注意在 Vite 配置中将 Winston 的服务端相关依赖标记为仅服务端导入,避免打包进客户端产物导致体积冗余

最简同构日志封装示例

// src/lib/logger.js
import { pino } from 'pino'

const isSSR = import.meta.env.SSR
const logLevel = import.meta.env.VITE_LOG_LEVEL ?? 'info'
const clientLogLevel = import.meta.env.VITE_CLIENT_LOG_LEVEL ?? 'warn'
const levelList = ['trace', 'debug', 'info', 'warn', 'error', 'fatal']

let logger
if (isSSR) {
  // 服务端初始化
  logger = pino({
    level: logLevel,
    transport: {
      target: 'pino-pretty',
      options: {
        colorize: true,
        timestamp: 'HH:MM:ss.l'
      }
    }
  })
} else {
  // 客户端初始化
  logger = {}
  levelList.forEach(level => {
    logger[level] = (...args) => {
      if (levelList.indexOf(level) >= levelList.indexOf(clientLogLevel)) {
        const printFn = console[level] ?? console.log
        printFn(`[${new Date().toISOString()}] [${level.toUpperCase()}]`, ...args)
      }
    }
  })
}

export default logger

使用时直接在任意服务端 load 函数、页面组件、客户端交互逻辑中导入 $lib/logger 调用即可,两端会自动匹配对应的输出规则。

内容的提问来源于stack exchange,提问作者Mikko Ohtamaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:54:06