~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/core-api/printk-basics.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 .. SPDX-License-Identifier: GPL-2.0
  2 
  3 ===========================
  4 Message logging with printk
  5 ===========================
  6 
  7 printk() is one of the most widely known functions in the Linux kernel. It's the
  8 standard tool we have for printing messages and usually the most basic way of
  9 tracing and debugging. If you're familiar with printf(3) you can tell printk()
 10 is based on it, although it has some functional differences:
 11 
 12   - printk() messages can specify a log level.
 13 
 14   - the format string, while largely compatible with C99, doesn't follow the
 15     exact same specification. It has some extensions and a few limitations
 16     (no ``%n`` or floating point conversion specifiers). See :ref:`How to get
 17     printk format specifiers right <printk-specifiers>`.
 18 
 19 All printk() messages are printed to the kernel log buffer, which is a ring
 20 buffer exported to userspace through /dev/kmsg. The usual way to read it is
 21 using ``dmesg``.
 22 
 23 printk() is typically used like this::
 24 
 25   printk(KERN_INFO "Message: %s\n", arg);
 26 
 27 where ``KERN_INFO`` is the log level (note that it's concatenated to the format
 28 string, the log level is not a separate argument). The available log levels are:
 29 
 30 +----------------+--------+-----------------------------------------------+
 31 | Name           | String |  Alias function                               |
 32 +================+========+===============================================+
 33 | KERN_EMERG     | "0"    | pr_emerg()                                    |
 34 +----------------+--------+-----------------------------------------------+
 35 | KERN_ALERT     | "1"    | pr_alert()                                    |
 36 +----------------+--------+-----------------------------------------------+
 37 | KERN_CRIT      | "2"    | pr_crit()                                     |
 38 +----------------+--------+-----------------------------------------------+
 39 | KERN_ERR       | "3"    | pr_err()                                      |
 40 +----------------+--------+-----------------------------------------------+
 41 | KERN_WARNING   | "4"    | pr_warn()                                     |
 42 +----------------+--------+-----------------------------------------------+
 43 | KERN_NOTICE    | "5"    | pr_notice()                                   |
 44 +----------------+--------+-----------------------------------------------+
 45 | KERN_INFO      | "6"    | pr_info()                                     |
 46 +----------------+--------+-----------------------------------------------+
 47 | KERN_DEBUG     | "7"    | pr_debug() and pr_devel() if DEBUG is defined |
 48 +----------------+--------+-----------------------------------------------+
 49 | KERN_DEFAULT   | ""     |                                               |
 50 +----------------+--------+-----------------------------------------------+
 51 | KERN_CONT      | "c"    | pr_cont()                                     |
 52 +----------------+--------+-----------------------------------------------+
 53 
 54 
 55 The log level specifies the importance of a message. The kernel decides whether
 56 to show the message immediately (printing it to the current console) depending
 57 on its log level and the current *console_loglevel* (a kernel variable). If the
 58 message priority is higher (lower log level value) than the *console_loglevel*
 59 the message will be printed to the console.
 60 
 61 If the log level is omitted, the message is printed with ``KERN_DEFAULT``
 62 level.
 63 
 64 You can check the current *console_loglevel* with::
 65 
 66   $ cat /proc/sys/kernel/printk
 67   4        4        1        7
 68 
 69 The result shows the *current*, *default*, *minimum* and *boot-time-default* log
 70 levels.
 71 
 72 To change the current console_loglevel simply write the desired level to
 73 ``/proc/sys/kernel/printk``. For example, to print all messages to the console::
 74 
 75   # echo 8 > /proc/sys/kernel/printk
 76 
 77 Another way, using ``dmesg``::
 78 
 79   # dmesg -n 5
 80 
 81 sets the console_loglevel to print KERN_WARNING (4) or more severe messages to
 82 console. See ``dmesg(1)`` for more information.
 83 
 84 As an alternative to printk() you can use the ``pr_*()`` aliases for
 85 logging. This family of macros embed the log level in the macro names. For
 86 example::
 87 
 88   pr_info("Info message no. %d\n", msg_num);
 89 
 90 prints a ``KERN_INFO`` message.
 91 
 92 Besides being more concise than the equivalent printk() calls, they can use a
 93 common definition for the format string through the pr_fmt() macro. For
 94 instance, defining this at the top of a source file (before any ``#include``
 95 directive)::
 96 
 97   #define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__
 98 
 99 would prefix every pr_*() message in that file with the module and function name
100 that originated the message.
101 
102 For debugging purposes there are also two conditionally-compiled macros:
103 pr_debug() and pr_devel(), which are compiled-out unless ``DEBUG`` (or
104 also ``CONFIG_DYNAMIC_DEBUG`` in the case of pr_debug()) is defined.
105 
106 
107 Function reference
108 ==================
109 
110 .. kernel-doc:: include/linux/printk.h
111    :functions: printk pr_emerg pr_alert pr_crit pr_err pr_warn pr_notice pr_info
112       pr_fmt pr_debug pr_devel pr_cont

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php