Skip to main content

ek_data/
log.rs

1//! 日志对象(`object.py:286-296`)。
2//!
3//! Python 缺省等级 `logging.INFO = 20`;Rust 直接以字节值表达(20/30/40),
4//! 与 enkeep 的 LogEngine 口径一致。
5//! Python 版在 `__post_init__` 里另存创建时刻 `time`;Rust 版不存——
6//! 时刻由网关/载荷方随发随记(EVENT_LOG 流自带总线时序)。
7
8/// `logging.INFO = 20`
9pub const LEVEL_INFO: i32 = 20;
10/// `logging.WARNING = 30`
11pub const LEVEL_WARNING: i32 = 30;
12/// `logging.ERROR = 40`
13pub const LEVEL_ERROR: i32 = 40;
14
15/// 日志数据:GUI 日志面板/日志文件的载荷。
16#[derive(Debug, Clone, PartialEq)]
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18pub struct LogData {
19    /// 上游网关名
20    pub gateway_name: String,
21    /// 日志正文
22    pub msg: String,
23    /// 等级(缺省 [`LEVEL_INFO`];Python `level: int = INFO`,object.py:292)
24    pub level: i32,
25}
26
27impl Default for LogData {
28    /// Python 缺省等级 `logging.INFO = 20`(`object.py:292`)。
29    fn default() -> Self {
30        Self {
31            gateway_name: String::new(),
32            msg: String::new(),
33            level: LEVEL_INFO,
34        }
35    }
36}
37
38impl LogData {
39    /// 用 [`LEVEL_INFO`] 构造(Python `msg` 必填 + 缺省级别的便捷式)。
40    pub fn info(gateway_name: &str, msg: impl Into<String>) -> Self {
41        Self {
42            gateway_name: gateway_name.to_string(),
43            msg: msg.into(),
44            level: LEVEL_INFO,
45        }
46    }
47
48    /// 是告警级(level >= WARNING)。
49    pub fn is_warning_or_above(&self) -> bool {
50        self.level >= LEVEL_WARNING
51    }
52}