是的,你可以。所有內核消息都可以保存syslog-ng守護進程。對於這個守護進程,您可以編寫自定義規則並將模塊中的所有消息放到特定文件中。採取先來看看/etc/syslog-ng/syslog-ng.conf
更新
默認情況下,所有的內核打印和printk的功能把消息發送到內核環緩衝區。用戶空間程序可以訪問這個環形緩衝區思想/ proc/kmsg文件。 (通過過濾器只是特殊模式)grep輸出並把數據放在不同的輸出中(在這個例子中它只是文本文件)。然後,Syslog-ng將從/ proc/kmsg讀取數據。如果輸出緩衝區,我們會發現從內核模塊 「你好」 輸出,syslog-ng的就會把郵件到/ var /日誌/你好,所有其它消息會去到/ var/log/messages中
模塊源
#include <linux/module.h>
#include <linux/kernel.h>
#define MODNAME "[hello]"
int init_module(void)
{
printk(KERN_WARNING MODNAME "Hello world 1.\n");
return 1;
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
後insmod的
insmod的HELLO-1.ko
在/ var/log/messages中,你可以找到:
年09月20十七點46分20秒NS1內核:[96643.968650] [你好]世界你好1.
確定,允許配置syslog-NG捉grep的日誌消息(通過使用圖案[你好] )
$貓/etc/syslog-ng/syslog-ng.conf
@version: 3.2
# $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo.3.2,v 1.1 2011/01/18 17:44:14 mr_bones_ Exp $
#
# Syslog-ng default configuration file for Gentoo Linux
options {
chain_hostnames(no);
stats_freq(43200);
mark_freq(3600);
};
source src {
unix-stream("/dev/log" max-connections(256));
internal();
file("/proc/kmsg");
};
destination messages { file("/var/log/messages"); };
# output file for ower module
destination hello_messages { file("/var/log/hello"); };
# grep patterns for ower module
filter f_hello { match("hello" value("MESSAGE")); };
filter f_kernel { facility(kern); };
log { source(src); destination(messages); };
log { source(src); destination(console_all); };
# target for logging
log { source(src); filter(f_hello); filter(f_kernel); destination(hello_messages); };
好吧,我想這不是在我的發行版中,所以我下載了它並觀看了一下。語法上的任何例子?我得到了一些...但我看不到過濾器如何映射到它正在過濾的過程。 – Mike
這只是簡單的正則表達式。我更新了答案 – Maxim
+1優秀的答案和例子。如果還有其他答案不涉及我標記我的所有照片,我會將問題留待一天,但我認爲這將被接受。謝謝! – Mike