commit 0c2d5c745f61386a88f0ca65e212e58c70f2a8d6
parent ec11a77e3ce9953c5f0536d29dcbbeeabdaba9aa
Author: triesap <137732411+triesap@users.noreply.github.com>
Date: Sat, 2 Aug 2025 17:32:26 +0000
Add daily-rotating file appender to tracing initializer
Diffstat:
2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/crates/indexer/src/config.rs b/crates/indexer/src/config.rs
@@ -1,8 +1,7 @@
-use std::path::Path;
-
use anyhow::Result;
use config::{Config, ConfigError, File};
use serde::{Deserialize, Serialize};
+use std::path::Path;
use thiserror::Error;
use tracing::error;
@@ -21,6 +20,7 @@ pub struct Relay {
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Service {
pub output_dir: String,
+ pub logs_dir: String,
pub flush_interval: u64,
}
diff --git a/crates/indexer/src/main.rs b/crates/indexer/src/main.rs
@@ -1,13 +1,28 @@
use anyhow::{Context, Result};
use clap::Parser;
use radroots_market_relay_indexer::config::Settings;
+use std::path::Path;
use std::time::{Duration, Instant};
use tracing::{error, info};
-use tracing_subscriber::EnvFilter;
+use tracing_appender::rolling;
+use tracing_subscriber::{fmt, prelude::*, registry::Registry, EnvFilter};
-fn init_tracing() {
- tracing_subscriber::fmt::fmt()
- .with_env_filter(EnvFilter::from_default_env())
+pub fn init_tracing(logs_dir: impl AsRef<Path>) {
+ let file_appender = rolling::daily(logs_dir, concat!(env!("CARGO_PKG_NAME"), ".log"));
+ let (file_writer, guard) = tracing_appender::non_blocking(file_appender);
+ std::mem::forget(guard);
+
+ let stdout_layer = fmt::layer().with_writer(std::io::stdout).with_target(false);
+
+ let file_layer = fmt::layer()
+ .with_writer(file_writer)
+ .with_ansi(false)
+ .with_target(false);
+
+ Registry::default()
+ .with(EnvFilter::from_default_env())
+ .with(stdout_layer)
+ .with(file_layer)
.init();
}
@@ -24,7 +39,6 @@ pub struct CliArgs {
#[tokio::main]
async fn main() {
- init_tracing();
let cli_args = CliArgs::parse();
if let Err(err) = run_service(cli_args).await {
@@ -34,11 +48,12 @@ async fn main() {
}
async fn run_service(cli_args: CliArgs) -> Result<()> {
- info!("Service starting");
-
let settings = Settings::load(&cli_args.config)
.with_context(|| format!("Failed to load configuration from {:?}", cli_args.config))?;
+ init_tracing(settings.service.logs_dir);
+ info!("Service starting");
+
loop {
let iteration_start = Instant::now();