1.7 KiB
1.7 KiB
Logger::Log
构造一条 LogEntry 并把它分发给所有已注册 sink。
void Log(
LogLevel level,
LogCategory category,
const Containers::String& message,
const char* file = nullptr,
int32_t line = 0,
const char* function = nullptr
);
行为说明
当前实现依次执行以下步骤:
- 如果
Logger尚未初始化,先调用Initialize()。 - 如果
level < m_minimumLevel,直接丢弃日志。 - 如果 category 对应的启用位为关闭状态,直接丢弃日志。
- 构造
LogEntry,填充:levelcategorymessagefilelinefunction- 当前秒级时间戳
- 当前线程哈希值
- 在互斥区内遍历所有 sink 并调用其
Log(entry)。
需要注意:
- 如果没有注册任何 sink,日志会被静默丢弃。
- 当前时间戳粒度是“秒”,不是毫秒或微秒。
- 当前线程 ID 是哈希结果,不保证与系统线程号一致。
参数
level- 日志级别。category- 日志分类。message- 日志文本。file- 可选的源文件路径。line- 可选的源码行号。function- 可选的函数名。
返回值
- 无。
线程语义
- sink 分发过程在互斥区内执行。
SetMinimumLevel和SetCategoryEnabled当前无锁,因此在高并发日志期间动态修改配置时要自行承担竞争风险。
示例
using namespace XCEngine::Debug;
Logger::Get().Log(
LogLevel::Warning,
LogCategory::General,
"Fallback code path selected",
__FILE__,
__LINE__,
__FUNCTION__
);