はい、できます。すべてのカーネルメッセージはsyslog-ngデーモンを保持できます。このデーモンでは、カスタムルールを記述し、モジュールからのすべてのメッセージを特定のファイルに配置できます。/etc/syslog-ng/syslog-ng.confを最初に見てください
アップデート
デフォルトでは、すべてのカーネルprintおよびprintk関数は、メッセージをカーネルリングバッファに配置します。ユーザースペースプログラムは、このリングバッファthought / proc/kmsgファイルにアクセスできます。
Syslog-ngは/proc/ kmsgからデータを読み取り、次にfilter(フィルターは単なる特殊パターン)grep出力を介して、データを別の出力(この例では単なるテキストファイル)に配置します。出力バッファにカーネルモジュール「hello」からの出力が見つかった場合、syslog-ngはメッセージを/ var / log / helloに配置し、他のすべてのメッセージは/ 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には、次のものがあります。
9月20日17:46:20ns1カーネル:[96643.968650] [hello] Helloworld1。
OK、grepログメッセージをキャッチするようにsyslog-ngを設定しましょう(パターン[hello]を使用)
$ cat /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); };