查看 CentOS 上 Golang 应用日志的实用方法
一 确认日志输出位置
- 常见位置包括:应用工作目录(如当前目录或项目目录)、自定义目录(如 /var/log/your_app/)、用户家目录(如 /home/username/logs/),以及通过 syslog/journald 写入系统日志的情况。若使用 systemd 托管服务,日志通常由 journald 管理。定位路径最直接的方式是查看应用的配置文件、启动脚本或源码中的日志初始化逻辑(例如 log.SetOutput、logrus 或 zap 的输出设置)。
二 常用查看命令
- 实时查看文件日志:使用 tail -f /path/to/app.log 跟踪最新输出;结合 grep 过滤关键字,如 grep ‘error’ /path/to/app.log 或反向过滤 grep -v ‘debug’。
- 查看 systemd 服务日志:若服务名为 my-golang-app.service,使用 journalctl -u my-golang-app.service 查看全部日志,或 journalctl -u my-golang-app.service -f 实时跟踪;可按时间范围检索,如 journalctl --since “2024-04-01” --until “2024-04-30”,也可配合 grep 搜索关键字。
- 直接查看控制台输出:应用在前台运行时,日志会打印到终端;若通过 nohup 启动,可在 nohup.out 中查看。
以上命令覆盖了文件日志与 systemd 日志两大常见场景。
三 按场景给出的命令示例
- 文件日志:实时查看并高亮错误
- 命令:tail -f /var/log/myapp/app.log | grep --color=auto -i error
- systemd 服务日志:查看最近 100 行并持续跟踪
- 命令:journalctl -u my-golang-app.service -n 100 -f
- 时间范围检索:查看昨天的日志
- 命令:journalctl -u my-golang-app.service --since “2025-12-24 00:00:00” --until “2025-12-24 23:59:59”
- 关键字统计与排查:统计错误出现次数
- 命令:grep -c ‘error’ /var/log/myapp/app.log
这些示例可快速定位启动失败、运行异常与错误频发的时间段与上下文。
四 日志轮转与长期管理
- 应用内轮转:使用 lumberjack 实现按大小与保留天数切割。示例:
- 配置:MaxSize=10(MB)、MaxBackups=3、MaxAge=28(天)、Compress=true;写入路径如 /var/log/myapp.log。
- 系统级轮转:交由 logrotate 管理。做法:在 /etc/logrotate.d/ 下新增配置(如 /etc/logrotate.d/myapp),设置 daily/weekly、rotate 7、compress、missingok、以及 postrotate 触发服务重新打开日志文件(如 systemctl reload my-golang-app)。
合理的轮转策略可避免单文件过大、便于归档与追溯。
五 让日志更易查的编码建议
- 使用成熟日志库(如 logrus、zap)并统一日志格式(包含 时间、级别、调用者 等);为便于检索,建议在日志中输出 request_id/ trace_id。
- 在 systemd 服务单元中设置 StandardOutput=journal、StandardError=journal,必要时配合 SyslogIdentifier=my-golang-app;为服务配置合适的 User/Group 与 WorkingDirectory,并确保日志目录存在且可写(如 /var/log/myapp/,权限 0755,日志文件 0644)。
- 为关键错误增加 主动告警(如对接企业微信/钉钉/邮件),并建立按天/按模块的日志目录结构。
这些实践能显著提升定位效率与可运维性。