SimpleKernel 1.17.0
Loading...
Searching...
No Matches
kernel_log.hpp File Reference
#include <cpu_io.h>
#include <etl/format.h>
#include <MPMCQueue.hpp>
#include <atomic>
#include <cstdint>
#include "kstd_cstdio"
Include dependency graph for kernel_log.hpp:

Go to the source code of this file.

Classes

struct  klog::detail::LogEntry
 存储于 MPMC 队列中的日志条目 More...
 

Namespaces

namespace  klog
 
namespace  klog::detail
 

Enumerations

enum class  klog::detail::Level : uint8_t { klog::detail::kDebug = 0 , klog::detail::kInfo = 1 , klog::detail::kWarn = 2 , klog::detail::kErr = 3 }
 日志级别 More...
 

Functions

__always_inline auto klog::detail::PutStr (const char *s) -> void
 通过 etl_putchar 输出字符串(空指针安全)
 
auto klog::detail::TryDrain () -> void
 将队列中所有条目输出至串口
 
template<Level Lvl, typename... Args>
__always_inline auto klog::detail::Log (etl::format_string< Args... > fmt, Args &&... args) -> void
 核心实现:格式化消息并入队,随后尝试排空
 
template<typename... Args>
auto klog::Debug (etl::format_string< Args... > fmt, Args &&... args) -> void
 以 DEBUG 级别记录日志(SIMPLEKERNEL_MIN_LOG_LEVEL > 0 时编译期消除)
 
template<typename... Args>
auto klog::Info (etl::format_string< Args... > fmt, Args &&... args) -> void
 以 INFO 级别记录日志
 
template<typename... Args>
auto klog::Warn (etl::format_string< Args... > fmt, Args &&... args) -> void
 以 WARN 级别记录日志
 
template<typename... Args>
auto klog::Err (etl::format_string< Args... > fmt, Args &&... args) -> void
 以 ERROR 级别记录日志
 
__always_inline auto klog::Flush () -> void
 强制将队列中所有日志条目输出至串口
 
__always_inline auto klog::RawPut (const char *msg) -> void
 绕过队列直接输出至串口(用于 panic 路径)
 

Variables

constexpr auto klog::detail::kMinLevel
 编译期最低日志级别
 
constexpr const char * klog::detail::kLevelLabel []
 日志级别标签(定宽,对齐输出)
 
constexpr const char * klog::detail::kLevelColor []
 日志级别对应的颜色(按 Level 枚举索引)
 
mpmc_queue::MPMCQueue< LogEntry, 256 > klog::detail::log_queue
 全局日志队列(64 KB 静态内存,constexpr 构造)
 
std::atomic< uint64_t > klog::detail::log_seq {0}
 用于跨核心排序的单调递增序列计数器
 
std::atomic_flag klog::detail::drain_flag = ATOMIC_FLAG_INIT
 单消费者排空保护(非阻塞 try-lock)
 
std::atomic< uint64_t > klog::detail::dropped_count {0}
 队列满时丢弃的条目计数
 
ANSI 转义码
constexpr auto klog::detail::kReset = "\033[0m"
 
constexpr auto klog::detail::kRed = "\033[31m"
 
constexpr auto klog::detail::kGreen = "\033[32m"
 
constexpr auto klog::detail::kYellow = "\033[33m"
 
constexpr auto klog::detail::kCyan = "\033[36m"