http://www.ibm.com/developerworks/cn/linux/l-kernel-logging-apis/



一、写日志缓存:

方式1: printk(linux kernel中存在)

注意,如果调用者未将日志级别提供给 printk,那么系统就会使用默认值 KERN_WARNING(表示只有 KERN_WARNING 级别以上的日志消息会被记录。)

数值范围从0到7,数值越小,优先级越高

控制日志:

/proc/sys/kernel/printk

1       4       1       7

# echo 8 > /proc/sys/kernel/printk

四个整型数值:当前记录级,缺省记录级,最低记录级和启动时刻的缺省记录级。

#define KERN_EMERG "<0>" 系统崩溃

#define KERN_ALERT "<1>"必须紧急处理
#define KERN_CRIT "<2>" 临界条件,严重的硬软件错误
#define KERN_ERR "<3>" 报告错误
#define KERN_WARNING "<4>" 警告
#define KERN_NOTICE "<5>" 普通但还是须注意
#define KERN_INFO "<6>" 信息
#define KERN_DEBUG "<7>" 调试信息


方式2:syslog内核函数(linux kernel中存在)

int syslog(int type, char *bufp, int len);  /* No wrapper provided in glibc */ ------- 内核API

        *
        *      0 -- Close the log.  Currently a NOP.
        *      1 -- Open the log. Currently a NOP.
        *      2 -- Read from the log.
        *      3 -- Read all messages remaining in the ring buffer.
        *      4 -- Read and clear all messages remaining in the ring buffer
        *      5 -- Clear ring buffer.
        *      6 -- Disable printk to console
        *      7 -- Enable printk to console
        *      8 -- Set level of messages printed to console
        *      9 -- Return number of unread characters in the log buffer
        *     10 -- Return size of the log buffer
        */

方式3:klogctl函数(C库中存在)

#include <sys/klog.h>

int klogctl(int type, char *bufp, int len);  --- glibc提供的API


二、写日志文件

方式1:/sbin/klogd -c -x

通过klogctl函数读取,通过syslog系统函数写入日志文件。(注意,此处的syslog不是kernel中的syslog)


方式2:syslogd

二者在busybox库中可以找到。

/etc/syslog.conf


三、读日志:

方式1:文件kmsg

-r-------- 1 root root 0 Dec 22 16:20 /proc/kmsg


方式2:命令dmesg 

dmesg is used to examine or control the kernel ring buffer。

打印不带日志级别,其他和/proc/kmsg的内容相同。


方式3:读日志文件??




printk

数值范围从0到7,数值越小,优先级越高

Logo

更多推荐