在Linux服务器上排查项目问题查看日志是最直接、最高效的手段。本教程将从基础到进阶全面介绍在Linux环境中查看、分析和监控项目日志的各种方法。一、 定位日志文件首先你需要知道日志文件在哪里。项目日志的位置通常由项目配置决定。常见日志目录项目部署目录很多项目会将日志文件生成在自身的应用目录下例如./logs/。系统应用日志目录/var/log/是Linux系统存放日志的标准位置。系统日志/var/log/syslog(Ubuntu/Debian) 或/var/log/messages(CentOS/RHEL)。认证日志/var/log/auth.log(Ubuntu/Debian) 或/var/log/secure(CentOS/RHEL)。Web服务器日志Nginx日志通常在/var/log/nginx/Apache日志在/var/log/apache2/或/var/log/httpd/。数据库日志MySQL日志默认在/var/log/mysql/。用户目录少数应用可能会在用户主目录下生成日志如~/.java/。使用命令定位如果不确定日志位置可以使用find命令进行查找。# 在当前目录及其子目录中查找所有 .log 文件 find . -name *.log # 在整个系统中查找名为 app.log 的文件 (可能需要sudo权限) sudo find / -name app.log二、 核心查看命令定位到日志文件后可以使用以下核心命令进行查看。1. cat一次性查看全部内容cat命令会将整个文件内容输出到终端。它适合查看体积较小的日志文件。对于大文件输出会刷屏难以阅读。cat /path/to/your/app.log2. less / more分页浏览大文件当日志文件非常大时less是最佳选择。它允许你逐页滚动并支持搜索。基本用法less /path/to/your/app.log常用快捷键空格键或Page Down向下翻页。b或Page Up向上翻页。/关键词向下搜索关键词例如/error。n跳转到下一个匹配项。N跳转到上一个匹配项。q退出less。more命令功能类似但只能向下翻页功能不如less强大。3. head / tail查看文件首尾这两个命令用于查看文件的开头或结尾部分。head查看文件开头。默认显示前10行。# 查看前20行 head -n 20 /path/to/your/app.logtail查看文件结尾。默认显示后10行。这是查看最新日志最常用的命令。# 查看最后50行 tail -n 50 /path/to/your/app.log4. tail -f实时监控日志这是排查线上问题时的“神器”。-f(follow) 参数会让tail命令持续监控文件一旦有新的日志写入就会立即显示在终端上。# 实时监控日志文件的最新内容 tail -f /path/to/your/app.log按CtrlC可以退出实时监控模式。三、 高级筛选与组合命令单纯的查看可能不够我们常常需要筛选出关键信息。1. grep强大的文本搜索工具grep命令可以从日志文件中筛选出包含特定关键词的行。基本搜索查找包含 error 的行。grep error /path/to/your/app.log忽略大小写使用-i参数。grep -i error /path/to/your/app.log排除匹配使用-v参数例如排除所有 INFO 级别的日志。grep -v INFO /path/to/your/app.log显示上下文使用-A(After) 和-B(Before) 显示匹配行及其前后N行便于了解错误发生的上下文。# 显示包含 Exception 的行及其后5行内容 grep -A 5 Exception /path/to/your/app.log2. 管道符|组合命令威力倍增管道符|可以将一个命令的输出作为另一个命令的输入实现复杂筛选。组合 tail 和 grep实时监控并只筛选出包含 ERROR 的日志。tail -f /path/to/your/app.log | grep ERROR组合 cat 和 grep在整个日志文件中搜索 Connection timed out 并忽略大小写。cat /path/to/your/app.log | grep -i connection timed out组合 less 和 grep在less中直接搜索。less /path/to/your/app.log # 进入less后输入 /error 即可搜索四、 使用 systemd 的 journalctl 查看日志对于使用systemd管理的现代Linux发行版如Ubuntu 16.04, CentOS 7服务日志会被收集到系统日志中可以使用journalctl命令进行统一查看。常用命令查看全部日志显示所有服务的日志。journalctl查看特定服务日志使用-u参数。# 查看 Nginx 服务的日志 journalctl -u nginx.service实时跟踪日志使用-f参数。# 实时跟踪 MySQL 服务的日志 journalctl -u mysql.service -f按时间筛选使用--since和--until参数。# 查看今天的日志 journalctl --since today # 查看从昨天早上9点到今天早上10点的日志 journalctl --since yesterday 09:00 --until today 10:00按日志级别筛选使用-p(priority) 参数。# 只查看错误err及以上级别的日志 journalctl -p err五、 查看Docker容器日志如果你的项目部署在Docker容器中查看日志的方式会有所不同。核心命令docker logs# 查看指定容器的日志 docker logs container_id_or_name # 实时跟踪容器日志 docker logs -f container_id_or_name # 查看容器日志的最后50行 docker logs --tail 50 container_id_or_name # 组合使用实时跟踪并筛选错误 docker logs -f container_id_or_name | grep ERROR六、 生产环境最佳实践1. 权限问题很多系统日志文件只有root用户或特定用户组如adm才有读取权限。如果遇到 Permission denied 错误请在命令前加上sudo。sudo tail -f /var/log/auth.log2. 日志轮转 (Log Rotation)为了避免日志文件无限增长占用磁盘空间Linux系统通常会配置logrotate工具。它会定期如每天或每周将日志文件重命名、压缩并创建一个新的空日志文件。因此你可能会看到类似app.log,app.log.1,app.log.2.gz这样的文件。查看旧日志时需要先解压zcat /path/to/your/app.log.2.gz | grep ERROR3. 使用专业工具对于大型或分布式系统日志分散在多台服务器上手动查看非常低效。此时应考虑使用专业的日志集中管理与分析工具如ELK Stack(Elasticsearch, Logstash, Kibana) 或Graylog。这些工具可以集中收集、存储、搜索和可视化所有服务器的日志极大地提升运维效率。