mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Revive network-test logs files in CI (#7459)
https://github.com/sigp/lighthouse/issues/7187 This PR adds a writer that implements `tracing_subscriber::fmt::MakeWriter`, which writes logs to separate files for each test.
This commit is contained in:
@@ -69,8 +69,6 @@ use types::{typenum::U4294967296, *};
|
||||
pub const HARNESS_GENESIS_TIME: u64 = 1_567_552_690;
|
||||
// Environment variable to read if `fork_from_env` feature is enabled.
|
||||
pub const FORK_NAME_ENV_VAR: &str = "FORK_NAME";
|
||||
// Environment variable to read if `ci_logger` feature is enabled.
|
||||
pub const CI_LOGGER_DIR_ENV_VAR: &str = "CI_LOGGER_DIR";
|
||||
|
||||
// Pre-computed data column sidecar using a single static blob from:
|
||||
// `beacon_node/execution_layer/src/test_utils/fixtures/mainnet/test_blobs_bundle.ssz`
|
||||
|
||||
@@ -57,4 +57,3 @@ disable-backfill = []
|
||||
fork_from_env = ["beacon_chain/fork_from_env"]
|
||||
portable = ["beacon_chain/portable"]
|
||||
test_logger = []
|
||||
ci_logger = []
|
||||
|
||||
@@ -107,6 +107,8 @@ impl TestRig {
|
||||
// deterministic seed
|
||||
let rng = ChaCha20Rng::from_seed([0u8; 32]);
|
||||
|
||||
init_tracing();
|
||||
|
||||
TestRig {
|
||||
beacon_processor_rx,
|
||||
beacon_processor_rx_queue: vec![],
|
||||
|
||||
@@ -9,9 +9,14 @@ use beacon_processor::WorkEvent;
|
||||
use lighthouse_network::NetworkGlobals;
|
||||
use rand_chacha::ChaCha20Rng;
|
||||
use slot_clock::ManualSlotClock;
|
||||
use std::sync::Arc;
|
||||
use std::fs::OpenOptions;
|
||||
use std::io::Write;
|
||||
use std::sync::{Arc, Once};
|
||||
use store::MemoryStore;
|
||||
use tokio::sync::mpsc;
|
||||
use tracing_subscriber::fmt::MakeWriter;
|
||||
use tracing_subscriber::layer::SubscriberExt;
|
||||
use tracing_subscriber::util::SubscriberInitExt;
|
||||
use types::{ChainSpec, ForkName, MinimalEthSpec as E};
|
||||
|
||||
mod lookups;
|
||||
@@ -65,3 +70,55 @@ struct TestRig {
|
||||
fork_name: ForkName,
|
||||
spec: Arc<ChainSpec>,
|
||||
}
|
||||
|
||||
// Environment variable to read if `fork_from_env` feature is enabled.
|
||||
pub const FORK_NAME_ENV_VAR: &str = "FORK_NAME";
|
||||
// Environment variable specifying the log output directory in CI.
|
||||
pub const CI_LOGGER_DIR_ENV_VAR: &str = "CI_LOGGER_DIR";
|
||||
|
||||
static INIT_TRACING: Once = Once::new();
|
||||
|
||||
pub fn init_tracing() {
|
||||
INIT_TRACING.call_once(|| {
|
||||
if std::env::var(CI_LOGGER_DIR_ENV_VAR).is_ok() {
|
||||
// Enable logging to log files for each test and each fork.
|
||||
tracing_subscriber::registry()
|
||||
.with(
|
||||
tracing_subscriber::fmt::layer()
|
||||
.with_ansi(false)
|
||||
.with_writer(CILogWriter),
|
||||
)
|
||||
.init();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// CILogWriter writes logs to separate files for each test and each fork.
|
||||
struct CILogWriter;
|
||||
|
||||
impl<'a> MakeWriter<'a> for CILogWriter {
|
||||
type Writer = Box<dyn Write + Send>;
|
||||
|
||||
// fmt::Layer calls this method each time an event is recorded.
|
||||
fn make_writer(&'a self) -> Self::Writer {
|
||||
let log_dir = std::env::var(CI_LOGGER_DIR_ENV_VAR).unwrap();
|
||||
let fork_name = std::env::var(FORK_NAME_ENV_VAR)
|
||||
.map(|s| format!("{s}_"))
|
||||
.unwrap_or_default();
|
||||
|
||||
// The current test name can be got via the thread name.
|
||||
let test_name = std::thread::current()
|
||||
.name()
|
||||
.unwrap_or("unnamed")
|
||||
.replace(|c: char| !c.is_alphanumeric(), "_");
|
||||
|
||||
let file_path = format!("{log_dir}/{fork_name}{test_name}.log");
|
||||
let file = OpenOptions::new()
|
||||
.append(true)
|
||||
.create(true)
|
||||
.open(&file_path)
|
||||
.expect("failed to open a log file");
|
||||
|
||||
Box::new(file)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user