Docs/ 运维/ 日志

日志

运行日志直接来自应用容器;构建日志随每次部署保存。两者都不是日志归档。

控制面板中的运行日志

应用的 Logs 选项卡会实时传输容器写入标准输出和标准错误的内容。打开时显示最近 100 行,并持续跟随新输出;查看器最多保留最近 1,000 行。

  • Search logs 和 Filter logs... 可筛选显示的行,并显示匹配数量。
  • Pause 冻结显示,新行会继续进入缓冲区;Resume 将其重新显示。
  • Toggle timestamps 显示或隐藏 Docker 为每一行记录的时间。
  • Copy logs 和 Download logs 获取查看器中当前的行(一个 .txt 文件);Clear logs 只清空查看器。
  • 对于由多个服务组成的应用,可通过选择器选择要读取的容器;默认是 Primary container。

日志流是位于 /api/v1/apps/<id>/logs 的 WebSocket,可选参数为 tail(最多 10,000 行)、follow 和 service;普通 HTTP 请求会被拒绝。

通过命令行

sh0 logs <app> 输出最近 50 行后退出;--tail N 可修改行数(真实输出):

Terminal
$ sh0 logs my-api --tail 3
[*] Connecting to logs for my-api...
2026-10-02T03:07:16.015Z GET /
2026-10-02T03:07:16.070Z GET /health
2026-10-02T03:07:16.123Z GET /api/items

-f / --follow 保持连接并持续输出新行,直到按下 Ctrl+C。

构建日志

每次部署都保留自己的构建与部署日志:可在应用的 Deployments 选项卡中打开。sh0 push 和 sh0 deploy --wait 会显示其发起的部署的进度。构建日志随部署记录保存在 sh0 的数据库中,不会自动清理。

保留哪些内容、保留多久

sh0 不保存运行日志的副本。它们存放在该容器的 Docker 日志文件中,并受 sh0 在创建容器时设置的限制约束:

日志保留方式
容器的运行输出Docker json-file 驱动,每 10 MB 轮转,保留 3 个文件:每个容器约 30 MB 上限,最旧的行最先丢弃
重新部署之后旧容器被删除,其日志也随之消失:查看器从新容器重新开始
构建与部署日志与部署记录一起保存,直到应用被删除
定时任务运行记录见 定时任务:运行历史按任务清理
Terminal
$ docker inspect <container> --format '{{json .HostConfig.LogConfig}}'
{"Type":"json-file","Config":{"max-file":"3","max-size":"10m"}}
Note
10 MB × 3 的限制适用于 sh0 以此设置创建的容器;由旧版本创建的容器在重新创建之前保留其创建时的限制。可如上用 docker inspect 检查(真实输出)。

更长时间保留日志

sh0 v1.10.2 没有日志导出、保留期设置,也不能将日志转发到外部服务。如需超出轮转窗口或跨部署的历史记录,请让应用把日志发送到外部服务(日志 SaaS、syslog 服务器或您自己的收集器),或在主机上运行读取 Docker 日志文件的收集器。