PatchworkOS  da8a090
A non-POSIX operating system.
Loading...
Searching...
No Matches
log.h
Go to the documentation of this file.
1#pragma once
2
3#include <kernel/defs.h>
4
5#include <boot/boot_info.h>
6
7#include <stdarg.h>
8#include <stdbool.h>
9#include <stdint.h>
10#include <sys/io.h>
11#include <sys/math.h>
12#include <sys/proc.h>
13
14/**
15 * @brief Logging
16 * @defgroup kernel_log Logging
17 * @ingroup kernel
18 *
19 * @{
20 */
21
22/**
23 * @brief Maximum buffer size for various logging buffers.
24 */
25#define LOG_MAX_BUFFER 0x1000
26
27/**
28 * @brief Logging output options.
29 */
30typedef enum
31{
34 LOG_OUTPUT_FILE = 1 << 2
36
37/**
38 * @brief Log levels.
39 */
49
50/**
51 * @brief Initialize the logging system.
52 */
53void log_init(void);
54
55/**
56 * @brief Enable logging to the screen.
57 */
58void log_screen_enable(void);
59
60/**
61 * @brief Disable logging to the screen.
62 */
63void log_screen_disable(void);
64
65/**
66 * @brief Print a unformatted log message.
67 *
68 * @warning See `log_vprint()` regarding the log lock and `LOG_LEVEL_PANIC`.
69 *
70 * @param level The log level.
71 * @param string The message string.
72 * @param length The length of the message.
73 */
74void log_nprint(log_level_t level, const char* string, uint64_t length);
75
76/**
77 * @brief Print a formatted log message.
78 *
79 * @warning See `log_vprint()` regarding the log lock and `LOG_LEVEL_PANIC`.
80 *
81 * @param level The log level.
82 * @param format The format string.
83 * @param ... The format arguments.
84 */
85void log_print(log_level_t level, const char* format, ...);
86
87/**
88 * @brief Print a formatted log message with a va_list.
89 *
90 * @warning If the log level is `LOG_LEVEL_PANIC`, this function will not acquire the log lock to avoid recursive
91 * panics. Its up to the panic system to ensure all other CPUs are halted before calling this.
92 *
93 * @param level The log level.
94 * @param format The format string.
95 * @param args The va_list of arguments.
96 */
97void log_vprint(log_level_t level, const char* format, va_list args);
98
99#ifndef NDEBUG
100#define LOG_DEBUG(format, ...) log_print(LOG_LEVEL_DEBUG, format __VA_OPT__(, ) __VA_ARGS__)
101#else
102#define LOG_DEBUG(format, ...) ((void)0)
103#endif
104
105#define LOG_USER(format, ...) log_print(LOG_LEVEL_USER, format __VA_OPT__(, ) __VA_ARGS__)
106#define LOG_INFO(format, ...) log_print(LOG_LEVEL_INFO, format __VA_OPT__(, ) __VA_ARGS__)
107#define LOG_WARN(format, ...) log_print(LOG_LEVEL_WARN, format __VA_OPT__(, ) __VA_ARGS__)
108#define LOG_ERR(format, ...) log_print(LOG_LEVEL_ERR, format __VA_OPT__(, ) __VA_ARGS__)
109#define LOG_PANIC(format, ...) log_print(LOG_LEVEL_PANIC, format __VA_OPT__(, ) __VA_ARGS__)
110
111/** @} */
void log_init(void)
Initialize the logging system.
Definition log.c:51
void log_print(log_level_t level, const char *format,...)
Print a formatted log message.
Definition log.c:191
log_level_t
Log levels.
Definition log.h:41
void log_screen_disable(void)
Disable logging to the screen.
Definition log.c:89
void log_nprint(log_level_t level, const char *string, uint64_t length)
Print a unformatted log message.
Definition log.c:168
void log_vprint(log_level_t level, const char *format, va_list args)
Print a formatted log message with a va_list.
Definition log.c:199
void log_screen_enable(void)
Enable logging to the screen.
Definition log.c:76
log_output_t
Logging output options.
Definition log.h:31
@ LOG_LEVEL_ERR
Definition log.h:46
@ LOG_LEVEL_DEBUG
Definition log.h:42
@ LOG_LEVEL_USER
Definition log.h:43
@ LOG_LEVEL_WARN
Definition log.h:45
@ LOG_LEVEL_PANIC
Definition log.h:47
@ LOG_LEVEL_INFO
Definition log.h:44
@ LOG_OUTPUT_SCREEN
Definition log.h:33
@ LOG_OUTPUT_SERIAL
Definition log.h:32
@ LOG_OUTPUT_FILE
Definition log.h:34
__builtin_va_list va_list
Definition stdarg.h:9
__UINT64_TYPE__ uint64_t
Definition stdint.h:17