Added paths to log files in the "About" dialog for easier support (#304)

This commit is contained in:
Thorsten Sommer authored and GitHub committed 2025-02-27 20:17:51 +01:00
1 parent 277dc73468
commit 9d2b63bbaa
7 files changed
+123 -11

No files matched your search

+39 -10
View File
@@ -7,10 +7,18 @@ use flexi_logger::{DeferredNow, Duplicate, FileSpec, Logger, LoggerHandle};
use flexi_logger::writers::FileLogWriter;
use log::kv;
use log::kv::{Key, Value, VisitSource};
use rocket::get;
use rocket::serde::json::Json;
use rocket::serde::Serialize;
use crate::api_token::APIToken;
use crate::environment::is_dev;
static LOGGER: OnceLock<RuntimeLoggerHandle> = OnceLock::new();
static LOG_STARTUP_PATH: OnceLock<String> = OnceLock::new();
static LOG_APP_PATH: OnceLock<String> = OnceLock::new();
/// Initialize the logging system.
pub fn init_logging() {
@@ -42,11 +50,16 @@ pub fn init_logging() {
false => "AI Studio Events",
};
let log_path = FileSpec::default()
.basename(log_basename)
.suppress_timestamp()
.suffix("log");
// Store the startup log path:
LOG_STARTUP_PATH.set(log_path.as_pathbuf(None).canonicalize().unwrap().to_str().unwrap().to_string()).expect("Cannot store the startup log path");
let runtime_logger = Logger::try_with_str(log_config).expect("Cannot create logging")
.log_to_file(FileSpec::default()
.basename(log_basename)
.suppress_timestamp()
.suffix("log"))
.log_to_file(log_path)
.duplicate_to_stdout(Duplicate::All)
.use_utc()
.format_for_files(file_logger_format)
@@ -63,12 +76,13 @@ pub fn init_logging() {
/// Switch the logging system to a file-based output.
pub fn switch_to_file_logging(logger_path: PathBuf) -> Result<(), Box<dyn Error>>{
LOGGER.get().expect("No LOGGER was set").handle.reset_flw(&FileLogWriter::builder(
FileSpec::default()
.directory(logger_path)
.basename("events")
.suppress_timestamp()
.suffix("log")))?;
let log_path = FileSpec::default()
.directory(logger_path)
.basename("events")
.suppress_timestamp()
.suffix("log");
LOG_APP_PATH.set(log_path.as_pathbuf(None).to_str().unwrap().to_string()).expect("Cannot store the app log path");
LOGGER.get().expect("No LOGGER was set").handle.reset_flw(&FileLogWriter::builder(log_path))?;
Ok(())
}
@@ -160,4 +174,19 @@ fn file_logger_format(
// Write the log message:
write!(w, "{}", &record.args())
}
#[get("/log/paths")]
pub async fn get_log_paths(_token: APIToken) -> Json<LogPathsResponse> {
Json(LogPathsResponse {
log_startup_path: LOG_STARTUP_PATH.get().expect("No startup log path was set").clone(),
log_app_path: LOG_APP_PATH.get().expect("No app log path was set").clone(),
})
}
/// The response the get log paths request.
#[derive(Serialize)]
pub struct LogPathsResponse {
log_startup_path: String,
log_app_path: String,
}
+1
View File
@@ -77,6 +77,7 @@ pub fn start_runtime_api() {
crate::secret::delete_secret,
crate::environment::get_data_directory,
crate::environment::get_config_directory,
crate::log::get_log_paths,
])
.ignite().await.unwrap()
.launch().await.unwrap();