tdm_server_rust/dev/
paths.rs1use crate::config::{resolve_config_dir, DevConsoleConfig};
4use std::path::{Path, PathBuf};
5
6pub fn resolve_log_dir(cfg: &DevConsoleConfig) -> PathBuf {
8 if let Ok(dir) = std::env::var("DEV_LOG_DIR") {
9 let trimmed = dir.trim();
10 if !trimmed.is_empty() {
11 return PathBuf::from(trimmed);
12 }
13 }
14 resolve_relative_or_absolute(&cfg.log_dir, default_log_dir())
15}
16
17pub fn resolve_error_log_path(cfg: &DevConsoleConfig) -> PathBuf {
19 resolve_log_dir(cfg).join("error.log")
20}
21
22pub fn resolve_app_log_path(cfg: &DevConsoleConfig) -> PathBuf {
24 if let Ok(path) = std::env::var("DEV_APP_LOG") {
25 let trimmed = path.trim();
26 if !trimmed.is_empty() {
27 return PathBuf::from(trimmed);
28 }
29 }
30 resolve_relative_or_absolute(&cfg.app_log, default_app_log())
31}
32
33fn resolve_relative_or_absolute(configured: &str, fallback: PathBuf) -> PathBuf {
34 let p = PathBuf::from(configured);
35 if p.is_absolute() {
36 return p;
37 }
38 if configured.starts_with("./") || configured.starts_with(".\\") {
39 return PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(&p);
40 }
41 if p.exists() {
42 return p;
43 }
44 fallback
45}
46
47fn default_log_dir() -> PathBuf {
48 let config_dir = resolve_config_dir();
49 config_dir
50 .parent()
51 .map(|p| p.join("logs"))
52 .unwrap_or_else(|| PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("logs"))
53}
54
55fn default_app_log() -> PathBuf {
56 let config_dir = resolve_config_dir();
57 config_dir
58 .parent()
59 .map(|p| p.join("app.log"))
60 .unwrap_or_else(|| PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("app.log"))
61}
62
63pub fn file_size_label(path: &Path) -> String {
65 match std::fs::metadata(path) {
66 Ok(m) => format!("{} bytes", m.len()),
67 Err(e) => format!("不可读: {e}"),
68 }
69}