Mantis/mantis/src/utils/logging.rs
ParrotXray d27af4e2e4
feat/complete-account-page (#15)
* wip

* wip

* wip

* wip

* wip

* docs: Delete LICENSE

* docs: Add GNU Affero General Public License v3

Added the GNU Affero General Public License version 3 to the project.

* feat: inline frontend submodule and add auth + access control improvements

* feat: Add live system log WebSocket API and frontend log viewer
2026-05-25 11:20:18 +08:00

57 lines
1.7 KiB
Rust

use std::fs;
use std::sync::Arc;
use tracing::Level;
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::filter::EnvFilter;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use crate::core::infrastructure::log_broadcaster::LogBroadcaster;
use crate::model::error::Error;
use crate::model::error::io::IOError;
use crate::utils::tracing_layer::BroadcastLayer;
pub struct Logging;
impl Logging {
pub fn initialize(broadcaster: Arc<LogBroadcaster>) -> Result<(), Error> {
let log_directory = "logs";
fs::create_dir_all(log_directory).map_err(|err| IOError::CreateDirectoryFailed(log_directory, err))?;
let file_appender = RollingFileAppender::new(Rotation::DAILY, log_directory, "Mantis");
let stdout_layer = tracing_subscriber::fmt::layer()
.with_file(true)
.with_line_number(true)
.with_thread_ids(true)
.with_target(false)
.with_ansi(true);
let file_layer = tracing_subscriber::fmt::layer()
.with_file(false)
.with_line_number(false)
.with_thread_ids(false)
.with_target(true)
.with_ansi(false)
.with_writer(file_appender);
let broadcast_layer = BroadcastLayer::new(broadcaster);
let level = if cfg!(debug_assertions) {
Level::DEBUG
} else {
Level::INFO
};
tracing_subscriber::registry()
.with(stdout_layer)
.with(file_layer)
.with(broadcast_layer)
.with(EnvFilter::from_default_env().add_directive(level.into()))
.init();
Ok(())
}
}