  Logging plays a crucial role in software engineering because it is key to
perform various tasks including debugging, performance analysis, and detection
of anomalies. Despite the importance of log data, the practice of logging still
suffers from the lack of common guidelines and best practices. Recent studies
investigated logging in C/C++ and Java open-source systems. In this paper, we
complement these studies by conducting the first empirical study on logging
practices in the Linux kernel, one of the most elaborate open-source
development projects in the computer industry. We analyze 22 Linux releases
with a focus on three main aspects: the pervasiveness of logging in Linux, the
types of changes made to logging statements, and the rationale behind these
changes. Our findings show that logging code accounts for 3.73% of the total
source code in the Linux kernel, distributed across 72.36% of Linux files. We
also found that the distribution of logging statements across Linux subsystems
and their components vary significantly with no apparent reasons, suggesting
that developers use different criteria when logging. In addition, we observed a
slow decrease in the use of logging-reduction of 9.27% between versions v4.3
and v5.3. The majority of changes in logging code are made to fix language
issues, modify log levels, and upgrade logging code to use new logging
libraries, with the overall goal of improving the precision and consistency of
the log output. Many recommendations are derived from our findings such as the
use of static analysis tools to detect log-related issues, the adoption of
common writing styles to improve the quality of log messages, the development
of conventions to guide developers when selecting log levels, the establishment
of review sessions to review logging code, and so on. [...]
