当前位置: 首页 > news >正文

关于Linux中的日志问题

Linux嵌入式开发中遇到的一些日志相关问题

linux终端通常不刷屏日志

我linux明明起了很多应用,也有日志打印,为啥没有任何日志显示,只有一个空终端

你看到的终端界面只有空命令行,没有任何应用日志输出,这是Linux 日志输出位置的典型问题:应用 / 内核的日志默认不会直接打印到当前终端,而是输出到专门的日志文件或系统日志服务中。

📌 为什么看不到日志?

  1. 日志重定向:应用启动时,标准输出 / 错误(stdout/stderr)被重定向到了/dev/null、日志文件或系统日志服务,而不是当前终端。
  2. 系统日志服务接管:现代 Linux(systemd 系统)的日志由journald统一管理,应用 / 服务日志不会直接打在终端。
  3. 前台 / 后台差异:如果应用是后台运行&或 systemd 服务),日志不会出现在当前 shell。

🛠️ 查看日志的正确方法

1. 查看 systemd 服务日志(最常用)

如果你的应用是通过systemd管理的服务:

# 实时查看服务日志(-f 表示 follow,类似 tail -f) journalctl -u 你的服务名.service -f # 查看最近 100 行日志 journalctl -u 你的服务名.service -n 100 # 按时间过滤(今天的日志) journalctl -u 你的服务名.service --since "today"

2. 查看应用自身的日志文件

很多应用会将日志写入固定路径,常见位置:

  • /var/log/下的应用目录(如/var/log/nginx//var/log/appname/
  • 应用安装目录下的logs/文件夹
  • 应用启动时指定的日志文件(如./app > app.log 2>&1

查看示例:

# 实时查看应用日志 tail -f /var/log/你的应用名.log

3. 查看内核 / 驱动日志(dmesg)

如果是内核 / 驱动相关日志:

# 实时查看内核日志 dmesg -w # 过滤蓝牙相关日志 dmesg -w | grep -i bluetooth

4. 查看所有系统日志

如果不确定日志归属,直接看全系统日志:

# 实时查看所有日志 journalctl -f

5. 前台运行应用(直接看输出)

如果想让日志直接打印到当前终端,前台启动应用

# 停止后台服务 systemctl stop 你的服务名.service # 前台运行应用,日志直接输出 ./你的应用程序

此时所有stdout/stderr都会打印在当前终端。

💡 关键排查点

  • 确认应用是否在后台运行ps aux | grep 你的应用名
  • 确认应用启动脚本:查看是否有> /dev/null 2>&1这类重定向语句
  • 确认系统日志服务systemctl status systemd-journald(必须运行)

✅ 总结

  • 日志不会自动出现在终端,需要通过journalctltail -f或前台启动来查看。
  • 优先用journalctl -u 服务名 -f排查服务类应用,用tail -f 日志文件排查自定义日志的应用。

dmesg

dmesg(全称display message)是 Linux 下查看内核环形缓冲区日志的命令,专门用来展示内核启动、硬件检测、驱动加载、设备事件等底层信息。

它的核心作用是:告诉你内核和硬件到底发生了什么,是排查硬件 / 驱动问题的 “第一入口”。


✨ 核心特点

  • 来源:日志来自内核的环形缓冲区(ring buffer),记录内核从启动到当前的所有关键事件。
  • 内容
    • 硬件枚举(CPU、内存、USB、PCIe、蓝牙、Wi-Fi 等设备的检测)
    • 驱动加载 / 卸载(比如btusbath9k等驱动的初始化)
    • 固件加载(比如蓝牙 / 显卡固件是否成功下载到硬件)
    • 设备异常(比如硬件断开、驱动报错、资源冲突)
  • 特点:日志不会自动打印到终端,需要用dmesg主动读取;日志会循环覆盖,旧信息会被新信息顶掉。

🧰 常用命令示例

# 1. 查看所有内核日志(从开机到现在) dmesg # 2. 实时滚动查看新日志(类似 tail -f) dmesg -w # 3. 过滤关键词(比如蓝牙、Wi-Fi、USB) dmesg | grep -i bluetooth dmesg | grep -i wifi dmesg | grep -i usb # 4. 查看最近 50 行日志 dmesg | tail -50 # 5. 带时间戳查看(更易读) dmesg -T

⚠️ 典型应用场景

  1. 硬件没反应:比如蓝牙 / USB 设备插了没反应 → 用dmesg看内核有没有检测到硬件。
  2. 驱动加载失败:比如hciconfig提示No such device→ 用dmesg | grep bluetooth看驱动 / 固件是否报错。
  3. 系统崩溃 / 重启:看崩溃前内核打印的错误信息。
  4. 固件缺失:比如dmesg提示Direct firmware load failed→ 说明缺少对应硬件的固件文件。

📊 与其他日志工具的区别

工具来源用途
dmesg内核环形缓冲区内核 / 硬件 / 驱动层调试
journalctlsystemd-journald系统 / 服务 / 应用层日志(包含内核日志)
tail -f /var/log/...应用日志文件特定应用的业务日志

💡 一句话总结

dmesg就是内核的 “黑匣子”,所有和硬件、驱动相关的问题,都要先从dmesg开始查。

tail

tail和cat有啥区别?

我用最简单、最直观、一看就懂的方式给你讲清楚:

一句话区别

cat = 一次性把文件全部显示出来tail = 只显示文件最后几行,还能实时追新加的内容


1. cat 命令

作用:把整个文件从头到尾全部打印出来

cat app.log

特点:

  • 全部输出
  • 不能实时追新日志
  • 文件太大时会刷屏,根本看不完

适合:看小文件、看配置文件


2. tail 命令

作用:只看文件最后几行,还能实时跟踪新内容

tail app.log # 只看最后10行 tail -n 20 app.log # 看最后20行 tail -f app.log # 实时追新日志(调试神器!)

特点:

  • 只看末尾
  • -f 可以实时刷新新日志
  • 不会刷屏,适合看日志

适合:看运行日志、调试程序、实时输出


最直观的比喻

  • cat = 把整本书一页不差全部读给你听
  • tail = 只读最后几页,而且新书一出来马上读给你听

你调试蓝牙 / 程序应该用哪个?

一定用 tail -f

tail -f /var/log/app.log

因为程序运行时日志一直在增加,只有tail -f实时看到最新打印


超级总结

  • cat:看全部,静态,不适合日志
  • tail:看末尾,-f 实时跟踪,调试必用

tail -F是什么?

tail -Ftail命令的增强版,专门用于日志文件被轮转 / 重建时仍能持续跟踪,比-f更健壮。


🔍 与tail -f的核心区别

命令行为适用场景
tail -f跟踪当前打开的文件描述符,如果文件被删除 / 重命名 / 重建,会停止更新临时调试、文件不会被轮转的场景
tail -F跟踪文件名,会定期检查文件是否存在 / 变更,文件重建后自动重新打开生产环境、日志轮转(logrotate)的长期监控

简单说:

  • -f:认 “文件句柄”,文件没了就停
  • -F:认 “文件名”,文件删了重建还能继续追

🧰 常用用法

# 实时跟踪日志,不怕日志被切割/重建 tail -F /var/log/ask_wifi_manager.log # 结合 grep 过滤关键日志 tail -F /var/log/app.log | grep "error" # 显示最后 50 行并实时跟踪 tail -n 50 -F /var/log/app.log

💡 典型场景

  1. 日志轮转(logrotate):系统会定期把旧日志改名(如app.log → app.log.1)并新建app.logtail -F会自动切换到新文件。
  2. 应用重启重建日志:应用重启时会清空 / 重建日志文件,tail -F不会中断。
  3. 长期监控:比-f更稳定,适合长时间跑监控脚本。

⚠️ 注意事项

  • tail -F本质是--follow=name --retry的组合,会有短暂的轮询延迟(默认 1 秒)。
  • 如果文件被删除且长时间未重建,tail -F会持续等待,直到文件再次出现。
  • 调试时临时看日志用-f足够,长期监控推荐用-F

✅ 一句话总结

tail -F= 不怕日志文件被删 / 改名 / 重建的 “不死版” 实时日志跟踪,是生产环境调试的首选。

http://www.jsqmd.com/news/500401/

相关文章:

  • 塔讯总线协议转换信捷 PLC 对接 TCP/IP 设备实战方案
  • 盘点2026年最靠谱的京东e卡回收渠道 - 团团收购物卡回收
  • 锂电池测试设备采集到本地数据库的解决方案
  • 2025-2026降AI率工具12家实测:学生党零成本最优解是它
  • AI外呼破局|成人教育降本关键,告别高转化成本
  • 千匠网络B2B软件开发:定制化赋能企业数字化交易闭环
  • 欧盟小额包裹监管趋严低客单模式如何调整才能不亏
  • AI辅助氢氧切割,助力工业企业零碳转型
  • LVGL9.5在VScode中安装模拟器
  • 【云原生】Helm应用商店
  • Avalonia的生命周期 之一
  • day55 代码随想录算法训练营 图论专题9
  • 软件质量概念、八大质量模型特征、影响质量的因素
  • LLM 节点调参-AI不再胡扯
  • QtCreator开发软件使用小技巧
  • CD147(分化簇147):作用机制、上市药物与未来研发趋势
  • JavaScript基础课程十三、ES6+ 核心语法(三)——数组与对象高级方法
  • 2025年年终总结之17.教育之文化的意义
  • LangChain4j AI Services 深度解析:声明式 API 与接口驱动开发
  • 企业私域运营全指南:从 0 到 10 万用户,可复制的全链路实操手册
  • 部署EasyVoice实现文字转语音
  • 2026山西继承纠纷有名律师选购要注意什么 - myqiye
  • 九、硬件要求
  • localStorage vs sessionStorage
  • 伴侣间的信任感被破坏后,如何重建与修复?
  • ENVI直接打开Landsat的C2L2数据(landsat5/8/9)
  • Linux传输层TCP,UDP相关内容
  • SEO_避开这些常见误区,让你的SEO事半功倍(435 )
  • 聊聊银川面部祛痣专业机构,费用大概多少钱? - 工业推荐榜
  • 京东e卡回收哪家强?深度解析热门回收渠道优劣 - 团团收购物卡回收