Where does output of print in kernel go?
Solution 1
It depends on the distribution, but many use klogd(8)
to get the messages from the kernel and will either log them to a file (sometimes /var/log/dmesg
or /var/log/kernel
) or to the system log via syslog(3)
. In the latter case, where the log entries end up will depend on the configuration of syslogd(8)
.
One note about the dmesg
command: Kernel messages are stored in a circular buffer, so large amounts of output will be overwritten.
Solution 2
Many times KERN_DEBUG
level messages are filtered and you need to explicitly increase the logging level. You can see what the system defaults are by examining /proc/sys/kernel/printk
. For example, on my system:
# cat /proc/sys/kernel/printk
4 4 1 7
the first number shows the console log level is KERN_WARNING
(see proc(5) man pages for more information). This means KERN_NOTICE
, KERN_INFO
, and KERN_DEBUG
messages will be filtered from the console. To increase the logging level or verbosity, use dmesg
$ sudo dmesg -n 7
$ cat /proc/sys/kernel/printk
7 4 1 7
Here, setting the level to 7 (KERN_DEBUG
) will allow all levels of messages to appear on the console. To automate this, add loglevel=
N to the kernel boot parameters where N is the log level you want going to the console or ignore_loglevel
to print all kernel messages to the console.
Solution 3
You'll get the output with the command dmesg
Solution 4
dmesg outputs all the messages from the kernel. Finding your desired messages would be difficult. Better use dmesg and grep combination and use a driver specific label in all your printk
messages. That will ease in eliminating all the unwanted messages.
printk("test: hello world")
dmesg | grep test
Solution 5
I had this problem on Ubuntu 11.10 and 10.04 LTS, on the former I edited /etc/rsyslog.d/50-default.conf, then restarted rsyslog using "sudo service rsyslog restart" to restart rsyslogd. Then it worked.
Note that Ubuntu uses *r*syslogd, not syslogd.
Related videos on Youtube
apoorv020
Updated on July 09, 2022Comments
-
apoorv020 almost 2 years
I am debugging a driver for linux (specifically ubuntu server 9.04), and there are several printf statements in the code.
Where can I view the output of these statements?
EDIT1: What i'm trying to do is write to kernel using the proc file-system. The print code is
static int proc_fractel_config_write(struct file *file, const char *argbuf, unsigned long count, void *data) { printk(KERN_DEBUG "writing fractel config\n"); ...
In kern.log, I see the following message when i try to overwrite the file /proc/net/madwifi/ath1/fractel_config (with varying time of course).
[ 8671.924873] proc write [ 8671.924919]
Any explainations?
-
apoorv020 over 13 yearsCan't find what I am looking for, but I will try again.
-
chris over 13 yearsAre they really "printf" statements? They really should be "printk", I don't think printf is defined in the kernel (please correct me if I'm wrong).
-
cheesysam over 13 yearsIt is my understanding that chris is correct. printk() will output to dmesg or /var/log/messages
-
pevik about 10 yearsLog level constants are currently (since 3.6?) defined in <linux/kern_levels.h>