一、cat /proc/kmsg //实时显示kernel log
dmesg //打印已生成的kernel log
两种办法可以实现实时显示kernel log
1、cat /proc/kmsg
/ # find -name *kmsg*
find -name *kmsg*
./dev/kmsg
./sys/devices/virtual/mem/kmsg
./sys/class/mem/kmsg
./sys/module/printk/parameters/always_kmsg_dump
./proc/kmsg
2、dmesg | tail -f
dmesg |tail -f //显示文件后十行内容 并在文件内容增加后 自动显示新增的文件内容head example.txt //显示文件 example.txt 的前十行内容
head -n 20 example.txt //显示文件 example.txt 的前二十行内容
tail example.txt //显示文件 example.txt 的后十行内容
tail -n 20 example.txt //显示文件 example.txt 的后二十行内容
tail -f example.txt //显示文件 example.txt 的后十行内容 并在文件内容增加后 自动显示新增的文件内容
最后一条命令非常有用 尤其在监控日志文件时 可以在屏幕上一直显示新增的日志信息.
二、不管kernel 的printk还是应用层的printf的log都可以通过主串口直接输出。
应用层实时打印log接口:
printf("write lcd cmd fail reto %d data %d\n",reto,data);
or
logger "This is just a simple log line"
kernel层实时打印log接口:
printk( "keypad KBR%d row%d %d new_state(%d) = %d \n",row,pdata->row_gpios[row],row_asserted(pdata, row),col,new_state[col]);
printk("simcom %s, %d\n", __FUNCTION__,g_enable_switch_spidev_write);
printf和logger区别:
1、都是在应用层添加log,但是printf是c语言代码中加log,logger是linux指令,可以加在脚本中,效果和echo差不多
2、用printf加的log在系统运行时如果代码执行到就可以在主串口中看到,logger加的log需要执行命令logread才能在控制台看到
三、linux/ubuntu系统下怎么保存命令行终端的输入、输出到指定log日志文件
在终端输入以下命令,之后,终端上的全部内容都会保存到文件。
script -q log.txt
这样,在当前目录下就会自动创建一个log.txt文件,保存终端的一切内容。
如果要停止保存,需要使用exit。
参数详解:
>script -t 指明输出录制的时间数据
>script -f 在输出到日志文件的同时,也可以查看日志文件的内容
>script -a 以追加的形式,放入文件
>script -q 静默模式运行,可以后台运行自动记录
>scriptreplay time.txt record.txt
>exit 退出
四、dmesg
- dmesg -c 在显示的同时,clean掉dmesg缓存中信息
- dmesg -T 以当前时间的方式显示时间信息,而不是图1所示的开机时间
- dmesg -d 显示dmesg中两条打印信息的时间间隔
dmesg -c|iwpriv ra0 show stainfo
dmesg | grep MAC -A 20 >/tmp/wifista.txt
如何只显示kernel前100行log?
root@FS1:/tmp# dmesg |head -100 # 只显示前100行log
root@FS1:/tmp# dmesg |tail -100 # 只显示后100行log
五、logger
logger,用于将日志添加到本地/var/log/syslog文件或远程Syslog服务器。 记录器提供了用于添加日志的不同选项,例如设置优先级,指定远程系统或显式定义Syslog端口。
用法:
$ logger "This is just a simple log line"
六、logread
logged则用来读取log.
例如在控制台执行logger “This is just a simple log line”,然后在控制台执行logread,就可以看到。
root@OpenWrt:/# logread
Thu Jan 1 08:00:00 1970 kern.emerg kernel:
root@OpenWrt:/# logger "This is just a simple log line"
root@OpenWrt:/# logread
Wed Dec 21 09:44:15 2022 user.notice root: This is just a simple log line
#include "common.h"
#include "web_system.h"#define LOGFILE_NAME ("/tmp/log.log")
#define SYSLOG_LEN_MAX (64*1024)int read_log(server *srv,char *log){
FILE *fp=NULL;char strs[128];int len = 0;int res = -1;fp = fopen(LOGFILE_NAME , "r");if(fp == NULL){
perror("open error");return -1;}memset(log,'\0',sizeof(log));while(fgets(strs, sizeof(strs), fp)!=NULL){
//printf("strs = %s \n",strs);len = len + strlen(strs);if(len < SYSLOG_LEN_MAX){
strcat(log,strs);}else{
break;}}//printf("resp_buff = %s \n",resp_buff);fclose(fp);return 1;
}int web_sys_log_get(server *srv,char *log){
int res =-1;system("rm -rf /tmp/log.log");system("logread >/tmp/log.log");res = read_log(srv,log);if(res !=1){
memset(log,'\0',SYSLOG_LEN_MAX);strcat(log,"sys log read error\n");}return res;
}int web_sys_log_clear(server *srv,char *json_data,char *json_res){
system("rm -rf /tmp/log.log");//system("dmesg -c >/dev/null");system("/etc/init.d/log restart");return 1;
}