Docs/ 运维/ 日志

日志

访问每个服务的构建和运行时日志。实时流式传输日志,按严重级别过滤,搜索特定模式,并下载日志用于离线分析。

构建日志与运行时日志

sh0 为每个服务捕获两种不同类型的日志。了解区别有助于快速找到所需信息。

构建日志

构建日志捕获镜像构建过程中发生的一切。包括 Dockerfile 层执行、依赖安装、编译输出和构建错误。

构建日志可从 部署 选项卡访问。每次部署都有自己的构建日志。

Build log viewer -- showing Docker build output with layer caching indicators, step numbers, and timestamps

构建日志中常见的关注点:

  • 依赖错误 -- 失败的 npm installpip install 或包解析问题。
  • 编译错误 -- TypeScript、Rust、Go 或其他编译时错误。
  • 缓存命中 -- 标记为「CACHED」的层可加速构建。
  • 镜像大小 -- 最终镜像大小显示在构建结束时。
Example build log output
Step 1/8 : FROM node:20-alpine
 ---> 2d8f48ba52c1
Step 2/8 : WORKDIR /app
 ---> Using cache
 ---> 8a3d2e1f5b7c
Step 3/8 : COPY package*.json ./
 ---> Using cache
 ---> 4f2a1b3c8d9e
Step 4/8 : RUN npm ci --production
 ---> Running in 7e6d5c4b3a2f
added 847 packages in 12.3s
Step 5/8 : COPY . .
 ---> 1a2b3c4d5e6f
Step 6/8 : RUN npm run build
 ---> Running in 9f8e7d6c5b4a
Build completed successfully
Step 7/8 : EXPOSE 3000
Step 8/8 : CMD ["node", "dist/server.js"]
Successfully built a1b2c3d4e5f6

运行时日志

运行时日志捕获运行中应用的输出——进程写入 stdout 和 stderr 的所有内容。包括 HTTP 请求日志、应用错误、调试消息和其他输出。

从服务详情页的 日志 选项卡访问运行时日志。

Runtime log viewer -- showing timestamped log entries with color-coded severity levels (info, warn, error)

实时日志流

日志查看器通过 WebSocket 连接实时流式传输日志。应用产生的新日志条目会即时出现在查看器底部。

  • 自动滚动 -- 查看器自动滚动显示最新条目。向上滚动可暂停自动滚动以检查旧条目。
  • 暂停/恢复 -- 点击 暂停 按钮临时停止流。日志会被缓冲,恢复时显示。
  • 时间戳格式 -- 每行前缀有时间戳。点击时间戳格式切换按钮在相对格式(「2 秒前」)和绝对格式(「2026-03-21 14:30:05」)之间切换。
Log streaming controls -- showing pause/resume button, auto-scroll indicator, and timestamp format toggle
Note
如果你的服务有多个副本,日志查看器会将所有容器的日志合并到单个流中。每条记录都标有容器 ID,以便区分不同副本。

过滤日志

过滤日志以关注重要内容。sh0 提供多种过滤选项:

  • 时间范围 -- 查看最近 15 分钟、1 小时、6 小时、24 小时或自定义日期范围的日志。
  • 容器 -- 当服务有多个副本时,过滤到特定的容器实例。
  • -- 仅显示 stdout、仅显示 stderr 或两者都显示。
  • 严重级别 -- 如果应用使用结构化日志,可按严重级别过滤(debug、info、warn、error)。
Log filter bar -- showing time range dropdown, container selector, stream toggle (stdout/stderr), and severity dropdown
Tip
按 stderr 过滤是快速查看错误输出的好方法。大多数应用将正常输出写入 stdout,错误写入 stderr。

搜索日志

使用搜索栏在日志流中查找特定条目。搜索支持纯文本匹配和基本正则表达式。

  1. 点击搜索图标或按 Ctrl + F(macOS 上为 Cmd + F)。
  2. 输入搜索查询。
  3. 匹配的条目在日志查看器中高亮显示。
  4. 使用搜索栏中的上/下箭头在匹配项之间跳转。
Search examples
# Find all error messages
ERROR

# Find a specific user ID
user_id=12345

# Find requests to a specific endpoint
POST /api/users

# Find slow requests (regex)
took [0-9]{4,}ms

下载日志

下载日志用于离线分析、归档或与团队共享。点击日志查看器中的 下载 按钮导出当前可见的日志。

  • 纯文本(.log) -- 带时间戳的原始日志输出,可直接用于 grepawk 或任何文本处理工具。
  • JSON(.json) -- 结构化格式,包含时间戳、容器 ID、流(stdout/stderr)和消息字段。
JSON log export format
{
  "timestamp": "2026-03-21T14:30:05.123Z",
  "container": "my-api-1",
  "stream": "stdout",
  "message": "GET /health 200 2ms"
}
Note
下载的日志遵循当前激活的过滤器和时间范围。要下载所有可用日志,请在导出前清除所有过滤器并将时间范围设置为最大。

日志保留

sh0 根据配置保留日志。默认保留设置在存储使用和调试需求之间取得平衡:

日志类型默认保留可配置
构建日志最近 20 次构建
运行时日志7 天是(1-90 天)
定时任务日志最近 100 次执行

要调整保留设置,导航到 设置 → 日志 并更新保留值。减少保留时间可节省服务器磁盘空间。

Tip
对于产生大量日志的应用,建议将保留时间减少到 3 天,并使用下载功能归档重要日志。你也可以配置应用在生产环境中减少日志详细程度。
Log retention settings -- showing retention period inputs for build logs, runtime logs, and cron job logs