added log level
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::ffi::CStr;
|
||||
use std::os::raw::c_char;
|
||||
use std::panic::{catch_unwind, AssertUnwindSafe};
|
||||
|
||||
@@ -35,7 +35,22 @@ pub extern "C" fn rust_log_event(event: *const c_char) {
|
||||
}
|
||||
CStr::from_ptr(event).to_str().unwrap_or("")
|
||||
};
|
||||
logging::log_event(msg);
|
||||
// Legacy wrapper: default to INFO
|
||||
logging::log_event_with_level(logging::LogLevel::Info, msg);
|
||||
}));
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn rust_log_event_with_level(event: *const c_char, level: i32) {
|
||||
let _ = catch_unwind(AssertUnwindSafe(|| {
|
||||
let msg = unsafe {
|
||||
if event.is_null() {
|
||||
return;
|
||||
}
|
||||
CStr::from_ptr(event).to_str().unwrap_or("")
|
||||
};
|
||||
let lvl = logging::LogLevel::from(level);
|
||||
logging::log_event_with_level(lvl, msg);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,50 @@ use std::io::Write;
|
||||
use std::sync::Mutex;
|
||||
use once_cell::sync::OnceCell;
|
||||
|
||||
#[repr(i32)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum LogLevel {
|
||||
Fatal = 0,
|
||||
Error = 1,
|
||||
Warn = 2,
|
||||
Info = 3,
|
||||
Debug = 4,
|
||||
Trace = 5,
|
||||
}
|
||||
|
||||
impl LogLevel {
|
||||
pub fn as_str(self) -> &'static str {
|
||||
match self {
|
||||
LogLevel::Fatal => "FATAL",
|
||||
LogLevel::Error => "ERROR",
|
||||
LogLevel::Warn => "WARN",
|
||||
LogLevel::Info => "INFO",
|
||||
LogLevel::Debug => "DEBUG",
|
||||
LogLevel::Trace => "TRACE",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<i32> for LogLevel {
|
||||
fn from(v: i32) -> Self {
|
||||
match v {
|
||||
0 => LogLevel::Fatal,
|
||||
1 => LogLevel::Error,
|
||||
2 => LogLevel::Warn,
|
||||
3 => LogLevel::Info,
|
||||
4 => LogLevel::Debug,
|
||||
5 => LogLevel::Trace,
|
||||
_ => LogLevel::Info,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for LogLevel {
|
||||
fn default() -> Self {
|
||||
LogLevel::Info
|
||||
}
|
||||
}
|
||||
|
||||
static LOGGER: OnceCell<Mutex<File>> = OnceCell::new();
|
||||
|
||||
pub fn init_logger(path: &str) {
|
||||
@@ -24,9 +68,14 @@ pub fn init_logger(path: &str) {
|
||||
LOGGER.set(Mutex::new(file)).ok();
|
||||
}
|
||||
|
||||
pub fn log_event(event: &str) {
|
||||
pub fn log_event_with_level(level: LogLevel, event: &str) {
|
||||
if let Some(logger) = LOGGER.get() {
|
||||
let mut file = logger.lock().unwrap();
|
||||
writeln!(file, "{}", event).ok();
|
||||
writeln!(file, "[{}] {}", level.as_str(), event).ok();
|
||||
}
|
||||
}
|
||||
|
||||
// Backwards-compatible wrapper: default to INFO
|
||||
pub fn log_event(event: &str) {
|
||||
log_event_with_level(LogLevel::Info, event);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user