From fd7c33252a75b4eaaa0d085e808bf847fd1f7f67 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 12:49:13 +0000 Subject: [PATCH 1/2] Use program uptime for log timestamps instead of absolute datetime. The timestamps now show milliseconds with microsecond precision (e.g. 123.456ms) since the program started. The full start datetime is logged on the first line. Co-authored-by: HalFrgrd <4559349+HalFrgrd@users.noreply.github.com> --- src/bin/evp.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/bin/evp.rs b/src/bin/evp.rs index f3b876c..bd28eab 100644 --- a/src/bin/evp.rs +++ b/src/bin/evp.rs @@ -127,7 +127,7 @@ fn real_main() -> Result<()> { return run_subcommand(command); } - init_tracing(&cli); + init_tracing(&cli, evp_start); log_build_info_debug(); // Either parse the user's script file, or use the embedded demo. @@ -227,17 +227,19 @@ fn run_subcommand(command: Commands) -> Result<()> { } } -/// Custom timer that emits only `HH:MM:SS` (UTC) so the date is not -/// repeated on every log line. -struct TimeOnly; +/// Custom timer that emits the uptime in milliseconds (down to +/// microseconds) since the program started. +struct Uptime(Instant); -impl tracing_subscriber::fmt::time::FormatTime for TimeOnly { +impl tracing_subscriber::fmt::time::FormatTime for Uptime { fn format_time(&self, w: &mut tracing_subscriber::fmt::format::Writer<'_>) -> std::fmt::Result { - write!(w, "{}", Utc::now().format("%H:%M:%S%.6f")) + let elapsed = self.0.elapsed(); + let micros = elapsed.as_micros(); + write!(w, "{:4}.{:03}ms", micros / 1000, micros % 1000) } } -fn init_tracing(cli: &Cli) { +fn init_tracing(cli: &Cli, start: Instant) { let filter = cli .log_level .map(LogLevel::as_str) @@ -247,9 +249,13 @@ fn init_tracing(cli: &Cli) { }); tracing_subscriber::fmt() .with_env_filter(filter.clone()) - .with_timer(TimeOnly) + .with_timer(Uptime(start)) .init(); - info!(date = %Utc::now().format("%Y-%m-%d"), %filter, "initialising tracing"); + info!( + start_time = %Utc::now().format("%Y-%m-%d %H:%M:%S%.6f UTC"), + %filter, + "initialising tracing" + ); } fn log_build_info_debug() { From a4527b1cc5f412b8523218dba8202de2d3d28c6f Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 15:25:09 +0000 Subject: [PATCH 2/2] Use humantime for logging and format uptime as XXX.XXXXXXs. - Replace chrono with humantime. - Format log timestamps as zero-padded seconds with microsecond precision (XXX.XXXXXXs). - Log full RFC3339 start time on the first log line. Co-authored-by: HalFrgrd <4559349+HalFrgrd@users.noreply.github.com> --- Cargo.lock | 222 +------------------------------------------------ Cargo.toml | 2 +- src/bin/evp.rs | 10 +-- 3 files changed, 10 insertions(+), 224 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1de88df..a48d597 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,15 +48,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - [[package]] name = "anstream" version = "1.0.0" @@ -189,12 +180,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bumpalo" -version = "3.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" - [[package]] name = "bytemuck" version = "1.25.0" @@ -207,16 +192,6 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -229,19 +204,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "chrono" -version = "0.4.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link", -] - [[package]] name = "clap" version = "4.6.1" @@ -306,12 +268,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - [[package]] name = "core_maths" version = "0.1.1" @@ -493,13 +449,13 @@ version = "0.6.0" dependencies = [ "ab_glyph", "anyhow", - "chrono", "clap", "clap_complete", "crossbeam-channel", "crossterm", "fontdb", "gifski", + "humantime", "imgref", "libghostty-vt", "libghostty-vt-sys", @@ -517,12 +473,6 @@ dependencies = [ "woff2-patched", ] -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - [[package]] name = "flate2" version = "1.1.9" @@ -568,30 +518,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-task" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" - -[[package]] -name = "futures-util" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "slab", -] - [[package]] name = "getset" version = "0.1.6" @@ -665,28 +591,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "iana-time-zone" -version = "0.1.65" +name = "humantime" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] +checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" [[package]] name = "ident_case" @@ -737,18 +645,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "js-sys" -version = "0.3.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" -dependencies = [ - "cfg-if", - "futures-util", - "once_cell", - "wasm-bindgen", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -1284,12 +1180,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "signal-hook" version = "0.3.18" @@ -1327,12 +1217,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - [[package]] name = "slotmap" version = "1.1.1" @@ -1614,51 +1498,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasm-bindgen" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.121" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" -dependencies = [ - "unicode-ident", -] - [[package]] name = "weezl" version = "0.1.12" @@ -1696,65 +1535,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.62.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.59.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" -[[package]] -name = "windows-result" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" -dependencies = [ - "windows-link", -] - [[package]] name = "windows-sys" version = "0.61.2" diff --git a/Cargo.toml b/Cargo.toml index deb15bd..e696ac2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,7 +28,7 @@ clap = { version = "4", features = ["derive"] } clap_complete = "4.6.5" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } -chrono = "0.4" +humantime = "2" # Serialization. serde = { version = "1", features = ["derive"] } diff --git a/src/bin/evp.rs b/src/bin/evp.rs index bd28eab..3adc5d6 100644 --- a/src/bin/evp.rs +++ b/src/bin/evp.rs @@ -1,10 +1,9 @@ //! `evp` binary entry point. All real work lives in the library crate //! (`evp::*`); this file is the thinnest possible CLI shim around it. -use std::{io, path::PathBuf, process::ExitCode, time::Instant}; +use std::{io, path::PathBuf, process::ExitCode, time::{Instant, SystemTime}}; use anyhow::{Context, Result, bail}; -use chrono::Utc; use clap::{CommandFactory, Parser, Subcommand, ValueEnum}; use clap_complete::{Shell as CompletionShell, generate}; use tracing::{debug, error, info}; @@ -234,8 +233,9 @@ struct Uptime(Instant); impl tracing_subscriber::fmt::time::FormatTime for Uptime { fn format_time(&self, w: &mut tracing_subscriber::fmt::format::Writer<'_>) -> std::fmt::Result { let elapsed = self.0.elapsed(); - let micros = elapsed.as_micros(); - write!(w, "{:4}.{:03}ms", micros / 1000, micros % 1000) + let secs = elapsed.as_secs(); + let micros = elapsed.subsec_micros(); + write!(w, "{:03}.{:06}s", secs, micros) } } @@ -252,7 +252,7 @@ fn init_tracing(cli: &Cli, start: Instant) { .with_timer(Uptime(start)) .init(); info!( - start_time = %Utc::now().format("%Y-%m-%d %H:%M:%S%.6f UTC"), + start_time = %humantime::format_rfc3339_micros(SystemTime::now()), %filter, "initialising tracing" );