使用gitlab-ctl命令(推荐)
GitLab自带的命令行工具,可实时查看所有服务日志或指定服务的日志,无需手动查找文件路径。
sudo gitlab-ctl tailsudo gitlab-ctl tail nginx/gitlab_access.log、sudo gitlab-ctl tail nginx/gitlab_error.logsudo gitlab-ctl tail gitlab-rails直接查看日志文件
GitLab的主要日志文件集中存储在/var/log/gitlab目录下,可通过常规文件查看命令操作:
sudo cat /var/log/gitlab/gitlab-rails/production.logsudo less /var/log/gitlab/gitlab-rails/production.logsudo tail -f /var/log/gitlab/gitlab-rails/production.log使用journalctl命令(Systemd系统)
适用于CentOS 7及以上系统,通过systemd管理GitLab服务的日志,可查看系统级日志:
sudo journalctl -u gitlab-railssudo journalctl -u gitlab-rails -fsudo journalctl -u gitlab-rails -n 100GitLab支持两种日志轮转方式:内置Runit工具(默认)和系统logrotate工具,建议优先使用内置配置。
内置Runit工具配置
通过修改/etc/gitlab/gitlab.rb文件调整日志轮转参数,配置完成后需执行gitlab-ctl reconfigure使设置生效:
logging ['svlogd_size'] = 200 * 1024 * 1024 # 单个日志文件最大200MB(超过则切割)
logging ['svlogd_num'] = 30 # 保留30个历史日志文件(约30天,按天切割)
logging ['svlogd_timeout'] = 24 * 60 * 60 # 每24小时生成新日志文件(即使未达到大小)
logging ['svlogd_filter'] = "gzip" # 切割后自动用gzip压缩旧日志
系统logrotate工具配置
GitLab内置了logrotate支持,可直接修改/etc/gitlab/gitlab.rb中的参数,或自定义/etc/logrotate.d/gitlab文件:
/etc/gitlab/gitlab.rb):logging ['logrotate_frequency'] = "daily" # 每天切割一次
logging ['logrotate_rotate'] = 30 # 保留30天日志
logging ['logrotate_compress'] = "compress" # 压缩旧日志
logging ['logrotate_missingok'] = true # 日志文件不存在时不报错
logging ['logrotate_notifempty'] = true # 日志为空时不切割
sudo logrotate -vf /etc/gitlab/gitlab.rbGitLab内置界面
登录GitLab Web界面,导航至CI/CD → Jobs,可查看构建任务的日志(包括执行状态、输出内容),适合快速定位CI/CD流程问题。
GitLab API
通过API获取特定项目的构建日志(需替换your_private_token和project_id、job_id):
curl --header "PRIVATE-TOKEN: your_private_token" \
"https://gitlab.example.com/api/v4/projects/project_id/jobs/job_id/trace"
适用于自动化脚本或第三方工具集成。
第三方工具
GitLab内置清理
通过gitlab-ctl命令清理旧日志:
sudo gitlab-ctl clean logs --days 7Git仓库日志清理
清理Git仓库中的引用日志(reflog)和无用对象,减少磁盘占用:
git reflog expire --expire=30d --allgit gc --prune=30.days.ago/var/opt/gitlab/git-data/repositories)下执行,或通过GitLab控制台运行。