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:向下翻页。
    • bPage 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。这些工具可以集中收集、存储、搜索和可视化所有服务器的日志,极大地提升运维效率。

相关推荐
其实防守也摸鱼1 分钟前
运维--ip单日获取去重数据量超过500条
运维·学习·tcp/ip·安全·web安全·安全威胁分析·工具
泰和英杰26 分钟前
2026 华为数字能源 + 机房工程实操标准:故障排查、机房建设、设备选型标准化技术方案
运维·服务器·网络
mounter62527 分钟前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
x_x-F1 小时前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
腾渊信息科技公司10 小时前
工业数据运维痛点根治方案:基于AI Agent的产线自动化台账系统落地
运维·人工智能·自动化·个人开发·ai编程
Dxy123931021610 小时前
Proxy Protocol v2 详解
运维
踏月的造梦星球10 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
潘正翔11 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin11 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
renhongxia111 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi