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

制作网站可用性监控百度关键词指数查询工具

制作网站可用性监控,百度关键词指数查询工具,国内最有趣的网站,非洲外贸平台有哪些Linux 内核日志(Kernel Log)有 8 个不同的级别(Severity Levels),用于表示消息的严重性。它们的定义在 include/linux/kern_levels.h 头文件中,并且可以用于 printk() 进行日志打印。 内核日志级别 级别数…

Linux 内核日志(Kernel Log)有 8 个不同的级别(Severity Levels),用于表示消息的严重性。它们的定义在 include/linux/kern_levels.h 头文件中,并且可以用于 printk() 进行日志打印。

内核日志级别

级别数值级别名称说明
0KERN_EMERG紧急(Emergency),系统不可用,如内核崩溃
1KERN_ALERT警报(Alert),需要立即处理,如磁盘故障
2KERN_CRIT严重(Critical),严重错误,如硬件故障
3KERN_ERR错误(Error),常规错误,如驱动问题
4KERN_WARNING警告(Warning),可能影响系统运行但未导致错误
5KERN_NOTICE注意(Notice),需要关注但不是错误
6KERN_INFO信息(Informational),普通运行信息
7KERN_DEBUG调试(Debug),用于开发和调试的信息

日志级别在 printk() 中的使用

printk(KERN_INFO "This is an informational message.\n"); 
printk(KERN_ERR "This is an error message.\n"); 

如果 printk() 没有指定级别,默认使用 DEFAULT_MESSAGE_LOGLEVEL,一般为 KERN_WARNING

如何查看当前日志

可以使用 dmesg 命令查看内核日志:

dmesg 

或者按级别筛选:

dmesg --level=err,warn 

level可以跟以下参数
emerg、alert 、 crit 、 err 、warn、notice、info、debug

/proc/sys/kernel/printk 文件中可以查看和修改 printk() 输出的默认级别:

cat /proc/sys/kernel/printk 

通常返回四个数字,如:

4 4 1 7 

它们的含义分别是:

  1. 当前控制台日志级别
  2. 默认日志级别
  3. 最低控制台日志级别
  4. 引导时的默认日志级别

你可以修改日志级别,比如设置默认日志级别为 KERN_INFO

echo 6 > /proc/sys/kernel/printk 

include/linux/kern_levels.h文件

源码

以下代码是 Linux 内核头文件 kern_levels.h 中的所有内容,它用于定义内核日志的级别,并且与 printk() 日志系统相关。

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __KERN_LEVELS_H__
#define __KERN_LEVELS_H__#define KERN_SOH	"\001"		/* ASCII Start Of Header */
#define KERN_SOH_ASCII	'\001'#define KERN_EMERG	KERN_SOH "0"	/* system is unusable */
#define KERN_ALERT	KERN_SOH "1"	/* action must be taken immediately */
#define KERN_CRIT	KERN_SOH "2"	/* critical conditions */
#define KERN_ERR	KERN_SOH "3"	/* error conditions */
#define KERN_WARNING	KERN_SOH "4"	/* warning conditions */
#define KERN_NOTICE	KERN_SOH "5"	/* normal but significant condition */
#define KERN_INFO	KERN_SOH "6"	/* informational */
#define KERN_DEBUG	KERN_SOH "7"	/* debug-level messages */#define KERN_DEFAULT	""		/* the default kernel loglevel *//** Annotation for a "continued" line of log printout (only done after a* line that had no enclosing \n). Only to be used by core/arch code* during early bootup (a continued line is not SMP-safe otherwise).*/
#define KERN_CONT	KERN_SOH "c"/* integer equivalents of KERN_<LEVEL> */
#define LOGLEVEL_SCHED		-2	/* Deferred messages from sched code* are set to this special level */
#define LOGLEVEL_DEFAULT	-1	/* default (or last) loglevel */
#define LOGLEVEL_EMERG		0	/* system is unusable */
#define LOGLEVEL_ALERT		1	/* action must be taken immediately */
#define LOGLEVEL_CRIT		2	/* critical conditions */
#define LOGLEVEL_ERR		3	/* error conditions */
#define LOGLEVEL_WARNING	4	/* warning conditions */
#define LOGLEVEL_NOTICE		5	/* normal but significant condition */
#define LOGLEVEL_INFO		6	/* informational */
#define LOGLEVEL_DEBUG		7	/* debug-level messages */#endif

解读

1. 头文件保护

#ifndef __KERN_LEVELS_H__ 
#define __KERN_LEVELS_H__ 
  • 这是 头文件防护(Include Guard),防止头文件被多次包含导致重复定义错误。
  • #ifndef 检查 __KERN_LEVELS_H__ 是否未定义,如果未定义,则 #define 它,并继续解析文件内容。

2. 定义 KERN_SOH(Start Of Header)

#define KERN_SOH "\001" /* ASCII Start Of Header */ 
#define KERN_SOH_ASCII '\001' 
  • \001 是 ASCII 码 SOH(Start of Header,开始头部),数值为 1
  • KERN_SOH 被定义为 "\001",即一个包含 ASCII SOH 字符的字符串。
  • KERN_SOH_ASCII 直接定义为字符 '\001',用于非字符串场景。

作用:
KERN_SOH 作为日志级别的前缀,便于 printk() 解析日志级别。

3. 定义日志级别

#define KERN_EMERG KERN_SOH "0" /* system is unusable */ 
#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */ 
#define KERN_CRIT KERN_SOH "2" /* critical conditions */ 
  • KERN_EMERG 定义为 "\0010",表示日志级别 0(紧急)。
  • KERN_ALERT 定义为 "\0011",表示日志级别 1(警报)。
  • KERN_CRIT 定义为 "\0012",表示日志级别 2(严重)。

自动连接:
在 C 语言中,字符串常量连接时会自动去掉空格,把它们合并成一个大的字符串。因此:

KERN_SOH "0" 会展开为 "\0010"。

其中 "\001" 是一个包含控制字符 SOH 的字符串,而 "0" 是包含字符 '0' 的字符串

所以,最终的结果并不是 "\001 0"(中间有空格),而是 "\0010",即 SOH 字符和字符 '0' 连接成一个字符串。

关键点:
空格 在字符串常量之间并不直接保留,而是被忽略。如果想得到"\001 0"应该写成KERN_SOH " 0",引号中的0前面有空格

为什么前缀 KERN_SOH

  • printk() 解析日志字符串时,会识别 \001 作为日志级别标志,后面的数字决定级别。
  • 例如:
    printk(KERN_ALERT "This is an alert message.\n"); 
    等价于:
    printk("\0011This is an alert message.\n"); 
    这样,printk() 解析到 \0011,就知道这是 警报(Alert)级别 的日志。

后续定义类似,从 紧急 (0) 到 调试 (7),数值越大严重性越低。


总结

  1. #ifndef 保护防止头文件重复包含。
  2. KERN_SOH (\001) 作为日志级别标志,方便 printk() 解析日志级别。
  3. KERN_EMERGKERN_ALERT 等定义了不同日志级别,以 "\001N" 形式标识,其中 N 是级别数值。
  4. printk(KERN_ERR "Some error occurred\n"); 实际会传递 "\0013Some error occurred\n" 供内核日志系统处理。

http://www.dtcms.com/wzjs/262106.html

相关文章:

  • wordpress全站静太化seo主管招聘
  • 五莲网站建设报价广东深圳龙华区
  • 苏州网站开发公司代运营网店公司
  • 谁有好的网站推荐一个百度网络推广
  • 家具在线设计网站百度站长工具如何使用
  • 青岛美容化妆品外贸网站建设数据分析平台
  • 长沙移动网站建设企业网站推广策划
  • 广东省政府疫情防控新闻发布会丈哥seo博客工具
  • 京东怎么开店网络营销的seo是做什么的
  • 在线单页网站制作百度软件安装
  • 网站建设需要哪些知识今晚比赛预测比分
  • 我是做网站的 怎么才能提高业绩品牌广告语
  • asp网站后台上传不了图片必应搜索推广
  • 做盗版电影网站问题sem竞价外包公司
  • 蒙牛企业网站建设规划书北京朝阳区优化
  • 个人网页设计作品html福州seo经理招聘
  • 几大网站类型公司网站推广
  • 集团网站建设服务百度推广中心
  • 电影网站加盟可以做么seo是啥
  • 网站服务器放置地电商seo与sem是什么
  • 抖音网络营销方式网站优化是做什么的
  • 做网站 信科网站建设便宜百度网页游戏中心
  • 肇庆网站建设制作公司百度没有排名的点击软件
  • 青岛网站推广seo词条
  • 开放平台设计湖北seo网站推广
  • 无锡优化网站业务怎么样免费做网站
  • 环保局网站设计方案今天热搜榜前十名
  • 网站开发业务流程百度网盘资源搜索引擎搜索
  • 手机网站模板单页佐力药业股票
  • 石家庄做网站公司汉狮价格护肤品营销策划方案