xref: /DragonOS/kernel/src/filesystem/procfs/log.rs (revision 6fc066ac11d2f9a3ac629d57487a6144fda1ac63)
18d72b68dSJomo use core::fmt::{Display, Formatter, Result};
28d72b68dSJomo 
38d72b68dSJomo use alloc::string::String;
48d72b68dSJomo 
5*6fc066acSJomo use crate::time::PosixTimeSpec;
68d72b68dSJomo 
78d72b68dSJomo // /// 日志类型
88d72b68dSJomo // #[derive(Default, Clone, Debug)]
98d72b68dSJomo // pub enum LogType {
108d72b68dSJomo //     /// 启动信息
118d72b68dSJomo //     Startup,
128d72b68dSJomo //     /// 驱动信息
138d72b68dSJomo //     Driver,
148d72b68dSJomo //     /// 系统信息
158d72b68dSJomo //     System,
168d72b68dSJomo //     /// 硬件信息
178d72b68dSJomo //     Hardware,
188d72b68dSJomo //     /// 内核模块信息
198d72b68dSJomo //     KernelModule,
208d72b68dSJomo //     /// 内核调试信息
218d72b68dSJomo //     KernelDebug,
228d72b68dSJomo //     #[default]
238d72b68dSJomo //     Default,
248d72b68dSJomo // }
258d72b68dSJomo 
268d72b68dSJomo /// 日志级别
278d72b68dSJomo #[derive(Default, Clone, PartialEq, Debug)]
288d72b68dSJomo pub enum LogLevel {
298d72b68dSJomo     EMERG = 0,
308d72b68dSJomo     ALERT = 1,
318d72b68dSJomo     CRIT = 2,
328d72b68dSJomo     ERR = 3,
338d72b68dSJomo     WARN = 4,
348d72b68dSJomo     NOTICE = 5,
358d72b68dSJomo     INFO = 6,
368d72b68dSJomo     DEBUG = 7,
378d72b68dSJomo     #[default]
388d72b68dSJomo     DEFAULT = 8,
398d72b68dSJomo }
408d72b68dSJomo 
418d72b68dSJomo impl From<usize> for LogLevel {
from(value: usize) -> Self428d72b68dSJomo     fn from(value: usize) -> Self {
438d72b68dSJomo         match value {
448d72b68dSJomo             0 => LogLevel::EMERG,
458d72b68dSJomo             1 => LogLevel::ALERT,
468d72b68dSJomo             2 => LogLevel::CRIT,
478d72b68dSJomo             3 => LogLevel::ERR,
488d72b68dSJomo             4 => LogLevel::WARN,
498d72b68dSJomo             5 => LogLevel::NOTICE,
508d72b68dSJomo             6 => LogLevel::INFO,
518d72b68dSJomo             7 => LogLevel::DEBUG,
528d72b68dSJomo             _ => LogLevel::DEFAULT,
538d72b68dSJomo         }
548d72b68dSJomo     }
558d72b68dSJomo }
568d72b68dSJomo 
578d72b68dSJomo /// 日志消息
588d72b68dSJomo #[derive(Default, Clone, Debug)]
598d72b68dSJomo pub struct LogMessage {
608d72b68dSJomo     /// 时间戳
61*6fc066acSJomo     timestamp: PosixTimeSpec,
628d72b68dSJomo     /// 日志级别
638d72b68dSJomo     level: LogLevel,
648d72b68dSJomo     // /// 日志类型
658d72b68dSJomo     // log_type: LogType,
668d72b68dSJomo     /// 日志消息
678d72b68dSJomo     message: String,
688d72b68dSJomo }
698d72b68dSJomo 
708d72b68dSJomo impl LogMessage {
new(timestamp: PosixTimeSpec, level: LogLevel, message: String) -> Self71*6fc066acSJomo     pub fn new(timestamp: PosixTimeSpec, level: LogLevel, message: String) -> Self {
728d72b68dSJomo         LogMessage {
738d72b68dSJomo             timestamp,
748d72b68dSJomo             level,
758d72b68dSJomo             message,
768d72b68dSJomo         }
778d72b68dSJomo     }
788d72b68dSJomo 
level(&self) -> LogLevel798d72b68dSJomo     pub fn level(&self) -> LogLevel {
808d72b68dSJomo         self.level.clone()
818d72b68dSJomo     }
828d72b68dSJomo }
838d72b68dSJomo 
848d72b68dSJomo impl Display for LogMessage {
fmt(&self, f: &mut Formatter<'_>) -> Result858d72b68dSJomo     fn fmt(&self, f: &mut Formatter<'_>) -> Result {
868d72b68dSJomo         let timestamp = &self.timestamp;
878d72b68dSJomo         let level = match self.level {
888d72b68dSJomo             LogLevel::EMERG => "EMERG",
898d72b68dSJomo             LogLevel::ALERT => "ALERT",
908d72b68dSJomo             LogLevel::CRIT => "CRIT",
918d72b68dSJomo             LogLevel::ERR => "ERR",
928d72b68dSJomo             LogLevel::WARN => "WARNING",
938d72b68dSJomo             LogLevel::NOTICE => "NOTICE",
948d72b68dSJomo             LogLevel::INFO => "INFO",
958d72b68dSJomo             LogLevel::DEBUG => "DEBUG",
968d72b68dSJomo             LogLevel::DEFAULT => "Default",
978d72b68dSJomo         };
988d72b68dSJomo 
998d72b68dSJomo         let message = &self.message;
1008d72b68dSJomo 
1018d72b68dSJomo         let res = format!(
1028d72b68dSJomo             "<{}>[{}.{}] : {}\n",
1038d72b68dSJomo             level, timestamp.tv_sec, timestamp.tv_nsec, message
1048d72b68dSJomo         );
1058d72b68dSJomo         return write!(f, "{}", res);
1068d72b68dSJomo     }
1078d72b68dSJomo }
108