linux 内核打印log太多咋办?

有时候发现,linux 内核打印太多消息了,对有用消息造成了干扰,如果你一个个源文件去关闭打印太麻烦了,有没有一种更方便的方式来关闭这些消息呢?

对这个需求,内核提供了一个强大而又灵活的方式,就是通过操作/proc/sys/kernel/printk文件来实现:

1.查看当前的设定:

“7 4 1 7” 分别对应console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel,意味着只有优先级高于KERN_DEBUG(7)的打印消息才能输出到终端

2. 改变console_loglevel

如果想屏蔽掉所有的内核printk打印,那么只需要把第一个数值调到最小值1或者0

### Linux 内核中的通用打印函数 在 Linux 内核中,`printk` 是最常用的通用打印函数之一。该函数用于向内核日志缓冲区写入消息,并支持多种调试和信息记录功能。以下是 `printk` 的基本实现原理及其相关特性: #### 函数定义与调用 `printk` 实际上是一个宏,在头文件 `<linux/printk.h>` 中定义[^3]。它的底层实现依赖于 `vprintk_func` 或类似的辅助函数。当调用 `printk` 时,格式化字符串会被解析并存储到环形缓冲区(circular buffer),随后由用户空间工具如 `dmesg` 显示。 ```c #define printk(fmt, ...) \ ({ \ int __ret = 0; \ if (likely(!suppressed_console_log_level)) { \ __ret = vprintk_func(fmt, ##__VA_ARGS__); \ } \ __ret; \ }) ``` 此代码片段展示了如何通过宏封装实际的日志记录逻辑[^4]。 #### 日志级别控制 `printk` 支持不同的日志优先级,这些优先级通常作为前缀嵌入到格式化字符串中。例如: - `KERN_EMERG`: 系统不可用的消息。 - `KERN_ALERT`: 必须立即采取行动的情况。 - `KERN_INFO`: 提供一般性的信息。 每种级别的作用范围可以在源码树的文档部分找到说明[^5]。 #### 输出目标 默认情况下,`printk` 将数据发送至多个位置,包括但不限于串口、帧缓冲设备以及系统日志文件 `/var/log/messages` 或者其他配置指定的位置。这种灵活性使得开发者能够方便地监控运行状态而无需修改太多现有架构设计[^6]。 对于更复杂的场景需求,则可以考虑扩展标准行为或者引入第三方库完成特定任务;比如定制化的跟踪机制或者是高性能环境下的异步处理策略等等。 ```bash cat /proc/sys/kernel/printk ``` 上面命令可查看当前系统的最低显示等级设置情况[^7]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值