商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何筛选CentOS上Golang的日志

如何筛选CentOS上Golang的日志

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

在CentOS上筛选Golang应用的日志,这事说复杂也复杂,说简单其实也简单。核心思路就三条:用对工具、选对命令、或者直接在代码层面做文章。下面把这几种方法掰开揉碎了讲一讲。

如何筛选CentOS上Golang的日志

先说说最传统也最稳的办法——grep硬筛

假设你有个叫app.log的日志文件,想找出所有带“error”关键字的内容,一条命令搞定:

grep 'error' app.log

如果想实时盯着新增的报错条目,那也很简单,加个-c选项就行:

grep -c 'error' app.log

这个命令会告诉你当前日志里有多少行包含“error”,适合快速排查问题频率。当然,grep本身就是文本过滤的瑞士军刀,关键词可以换成你想要的任何内容,比如“panic”、“timeout”,或者一个特定的请求ID。

第二种场景:如果你的Golang应用是用systemd托管的,那journalctl就是你的首选。先找到服务的名字,然后这样操作:

journalctl -u your-service-name

这会把服务启动以来的所有日志都倒出来,信息量很大。想从中挑出包含“error”的条目?老办法,加个管道和grep

journalctl -u your-service-name | grep 'error'

这里有个实用技巧:journalctl本身也支持过滤,比如-p err可以直接筛选错误级别的日志,比单纯用grep更精准。不过需要你的服务日志格式配合,具体可以查一下手册。

第三种方法,我个人觉得是最优雅也一劳永逸的——从代码层面控制日志级别

Golang内置的log库功能有限,生产环境里大家更常用logruszap。这些库的核心能力就是分级记录:Debug、Info、Warn、Error、Fatal。你可以在代码里直接设定只记录Error级别及以上的日志,其他低级别信息自动忽略。拿logrus举个例子,很简单:

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    logrus.SetLevel(logrus.ErrorLevel)
    logrus.Info("This log entry will not be displayed")
    logrus.WithFields(logrus.Fields{
        "animal": "walrus",
        "size":   10,
    }).Error("A walrus appears")
}

在这个例子里,logrus.Info那一行根本不会出现在日志里,只有logrus.Error才会被记录。这样一来,你只需要关注日志里的“ERROR”字段,就相当于自动完成了筛选,省去了排查时大海捞针的麻烦。

必须提醒的是,grepjournalctl都是事后筛选,而日志库的级别设定是从源头控制。如果应用已经压上生产了,临时想筛日志,前两种方法最管用;如果还在开发阶段,或者能改配置,用第三方日志库做分层管理才是长远之计。根据你的实际场景选吧,没有银弹,但总有合适的路。从经验来看,大多数运维老手都是几个方法混着用——代码里设好级别,排障时再用grepjournalctl精确捞数据,这样最顺手。

本文转载于:https://www.yisu.com/ask/42186549.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注