Linux服务器日志查看完全指南
在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.log
2. 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.log
tail:查看文件结尾。默认显示后10行。这是查看最新日志最常用的命令。
# 查看最后50行
tail -n 50 /path/to/your/app.log
4. tail -f:实时监控日志
这是排查线上问题时的“神器”。-f (follow) 参数会让 tail 命令持续监控文件,一旦有新的日志写入,就会立即显示在终端上。
# 实时监控日志文件的最新内容
tail -f /path/to/your/app.log
按 Ctrl+C 可以退出实时监控模式。
三、 高级筛选与组合命令
单纯的查看可能不够,我们常常需要筛选出关键信息。
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.log
2. 管道符 |:组合命令,威力倍增
管道符 | 可以将一个命令的输出作为另一个命令的输入,实现复杂筛选。
组合 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.log
2. 日志轮转 (Log Rotation)
为了避免日志文件无限增长占用磁盘空间,Linux系统通常会配置 logrotate 工具。它会定期(如每天或每周)将日志文件重命名、压缩,并创建一个新的空日志文件。因此,你可能会看到类似 app.log, app.log.1, app.log.2.gz 这样的文件。查看旧日志时,需要先解压:
zcat /path/to/your/app.log.2.gz | grep "ERROR"
3. 使用专业工具
对于大型或分布式系统,日志分散在多台服务器上,手动查看非常低效。此时应考虑使用专业的日志集中管理与分析工具,如 ELK Stack (Elasticsearch, Logstash, Kibana) 或 Graylog。这些工具可以集中收集、存储、搜索和可视化所有服务器的日志,极大地提升运维效率。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)