debug: Add forced stderr flush to ensure startup logs are visible
This commit is contained in:
parent
44a6f91505
commit
acc1364335
1 changed files with 56 additions and 18 deletions
|
|
@ -16,18 +16,32 @@ use tower_http::{
|
||||||
trace::TraceLayer,
|
trace::TraceLayer,
|
||||||
};
|
};
|
||||||
use config::Config;
|
use config::Config;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
eprintln!("NORMOGEN BACKEND STARTING...");
|
// Force flush immediately to ensure we see output
|
||||||
eprintln!("Loading environment variables...");
|
let mut stderr = std::io::stderr();
|
||||||
|
writeln!(stderr, "=== NORMOGEN BACKEND STARTING ===")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
|
writeln!(stderr, "[STARTUP] Loading environment variables...")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
match dotenv::dotenv() {
|
match dotenv::dotenv() {
|
||||||
Ok(path) => eprintln!("Loaded .env from: {:?}", path),
|
Ok(path) => {
|
||||||
Err(e) => eprintln!("No .env file found (this is OK in Docker): {}", e),
|
writeln!(stderr, "[STARTUP] Loaded .env from: {:?}", path)?;
|
||||||
|
stderr.flush()?;
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
writeln!(stderr, "[STARTUP] No .env file found (this is OK in Docker): {}", e)?;
|
||||||
|
stderr.flush()?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eprintln!("Initializing logging...");
|
writeln!(stderr, "[STARTUP] Initializing logging...")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
tracing_subscriber::fmt()
|
tracing_subscriber::fmt()
|
||||||
.with_env_filter(
|
.with_env_filter(
|
||||||
tracing_subscriber::EnvFilter::try_from_default_env()
|
tracing_subscriber::EnvFilter::try_from_default_env()
|
||||||
|
|
@ -35,34 +49,52 @@ async fn main() -> anyhow::Result<()> {
|
||||||
)
|
)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
eprintln!("Loading configuration...");
|
writeln!(stderr, "[STARTUP] Loading configuration...")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
let config = match Config::from_env() {
|
let config = match Config::from_env() {
|
||||||
Ok(cfg) => {
|
Ok(cfg) => {
|
||||||
tracing::info!("Configuration loaded successfully");
|
writeln!(stderr, "[STARTUP] Config loaded: DB={}, Port={}", cfg.database.database, cfg.server.port)?;
|
||||||
eprintln!("Config loaded: DB={}, Port={}", cfg.database.database, cfg.server.port);
|
stderr.flush()?;
|
||||||
cfg
|
cfg
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("FATAL: Failed to load configuration: {}", e);
|
writeln!(stderr, "[FATAL] Failed to load configuration: {}", e)?;
|
||||||
|
stderr.flush()?;
|
||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
tracing::info!("Connecting to MongoDB at {}", config.database.uri);
|
writeln!(stderr, "[STARTUP] Connecting to MongoDB at {}...", config.database.uri)?;
|
||||||
eprintln!("Connecting to MongoDB...");
|
stderr.flush()?;
|
||||||
|
|
||||||
let db = match db::MongoDb::new(&config.database.uri, &config.database.database).await {
|
let db = match db::MongoDb::new(&config.database.uri, &config.database.database).await {
|
||||||
Ok(db) => {
|
Ok(db) => {
|
||||||
tracing::info!("Connected to MongoDB database: {}", config.database.database);
|
writeln!(stderr, "[STARTUP] MongoDB connection successful!")?;
|
||||||
eprintln!("MongoDB connection successful");
|
stderr.flush()?;
|
||||||
db
|
db
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("FATAL: Failed to connect to MongoDB: {}", e);
|
writeln!(stderr, "[FATAL] Failed to connect to MongoDB: {}", e)?;
|
||||||
|
stderr.flush()?;
|
||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
tracing::info!("MongoDB health check: {}", db.health_check().await?);
|
writeln!(stderr, "[STARTUP] Performing health check...")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
|
match db.health_check().await {
|
||||||
|
Ok(health) => {
|
||||||
|
writeln!(stderr, "[STARTUP] MongoDB health check: {}", health)?;
|
||||||
|
stderr.flush()?;
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
writeln!(stderr, "[FATAL] MongoDB health check failed: {}", e)?;
|
||||||
|
stderr.flush()?;
|
||||||
|
return Err(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let jwt_service = auth::JwtService::new(config.jwt.clone());
|
let jwt_service = auth::JwtService::new(config.jwt.clone());
|
||||||
|
|
||||||
|
|
@ -72,7 +104,8 @@ async fn main() -> anyhow::Result<()> {
|
||||||
config: config.clone(),
|
config: config.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
eprintln!("Building router...");
|
writeln!(stderr, "[STARTUP] Building router...")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
let public_routes = Router::new()
|
let public_routes = Router::new()
|
||||||
.route("/health", get(handlers::health_check))
|
.route("/health", get(handlers::health_check))
|
||||||
|
|
@ -115,12 +148,17 @@ async fn main() -> anyhow::Result<()> {
|
||||||
|
|
||||||
let app = public_routes.merge(protected_routes).with_state(app_state);
|
let app = public_routes.merge(protected_routes).with_state(app_state);
|
||||||
|
|
||||||
eprintln!("Binding to {}:{}...", config.server.host, config.server.port);
|
writeln!(stderr, "[STARTUP] Binding to {}:{}...", config.server.host, config.server.port)?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind(&format!("{}:{}", config.server.host, config.server.port))
|
let listener = tokio::net::TcpListener::bind(&format!("{}:{}", config.server.host, config.server.port))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
writeln!(stderr, "[STARTUP] Server listening on http://{}:{}", config.server.host, config.server.port)?;
|
||||||
|
writeln!(stderr, "[STARTUP] Server ready to accept connections!")?;
|
||||||
|
stderr.flush()?;
|
||||||
|
|
||||||
tracing::info!("Server listening on {}:{}", config.server.host, config.server.port);
|
tracing::info!("Server listening on {}:{}", config.server.host, config.server.port);
|
||||||
eprintln!("Server is running on http://{}:{}", config.server.host, config.server.port);
|
|
||||||
|
|
||||||
axum::serve(listener, app).await?;
|
axum::serve(listener, app).await?;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue