mirror of
https://github.com/ParrotXray/Mantis.git
synced 2026-08-24 19:00:27 +09:00
* 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
57 lines
1.7 KiB
Rust
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(())
|
|
}
|
|
}
|