Skip to content

Commit 3cbd42e

Browse files
authored
Merge pull request #760 from DAIMENGEN/fix/log-forwarding-check-enabled
feat(logging): optimize log handling by early level filtering
2 parents 2f433cd + a9995df commit 3cbd42e

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

examples/simple/src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ fn main() -> Result<()> {
138138
} = Args::parse();
139139

140140
if verbose {
141-
tracing_subscriber::fmt().init();
141+
// tracing_subscriber::fmt().init();
142+
tracing_subscriber::fmt::init();
142143
}
143144
send_logs_to_tracing(LogOptions::default().with_logs_enabled(verbose));
144145

llama-cpp-2/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,11 @@ extern "C" fn logs_to_trace(
375375

376376
let log_state = unsafe { &*(data as *const log::State) };
377377

378+
// If the log level is disabled, we can just return early
379+
if !log_state.is_enabled_for_level(level) {
380+
return;
381+
}
382+
378383
let text = unsafe { std::ffi::CStr::from_ptr(text) };
379384
let text = text.to_string_lossy();
380385
let text: &str = text.borrow();

llama-cpp-2/src/log.rs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -142,18 +142,16 @@ impl State {
142142
let (meta, fields) = meta_for_level(level);
143143

144144
tracing::dispatcher::get_default(|dispatcher| {
145-
if dispatcher.enabled(meta) {
146-
dispatcher.event(&tracing::Event::new(
147-
meta,
148-
&meta.fields().value_set(&[
149-
(&fields.message, Some(&text as &dyn tracing::field::Value)),
150-
(
151-
&fields.target,
152-
module.as_ref().map(|s| s as &dyn tracing::field::Value),
153-
),
154-
]),
155-
));
156-
}
145+
dispatcher.event(&tracing::Event::new(
146+
meta,
147+
&meta.fields().value_set(&[
148+
(&fields.message, Some(&text as &dyn tracing::field::Value)),
149+
(
150+
&fields.target,
151+
module.as_ref().map(|s| s as &dyn tracing::field::Value),
152+
),
153+
]),
154+
));
157155
});
158156
}
159157

@@ -253,6 +251,16 @@ impl State {
253251
}
254252
}
255253
}
254+
255+
/// Checks whether the given log level is enabled by the current tracing subscriber.
256+
pub(super) fn is_enabled_for_level(&self, level: llama_cpp_sys_2::ggml_log_level) -> bool {
257+
// CONT logs do not need to check if they are enabled.
258+
if level == llama_cpp_sys_2::GGML_LOG_LEVEL_CONT {
259+
return true;
260+
}
261+
let (meta, _) = meta_for_level(level);
262+
tracing::dispatcher::get_default(|dispatcher| dispatcher.enabled(meta))
263+
}
256264
}
257265

258266
pub(super) static LLAMA_STATE: OnceLock<Box<State>> = OnceLock::new();

0 commit comments

Comments
 (0)