diff --git a/aya-log-ebpf-macros/src/expand.rs b/aya-log-ebpf-macros/src/expand.rs index 9d81d6a7..45d5b41e 100644 --- a/aya-log-ebpf-macros/src/expand.rs +++ b/aya-log-ebpf-macros/src/expand.rs @@ -152,34 +152,36 @@ pub(crate) fn log(args: LogArgs, level_expr: Option) -> Result {}, - Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { - // Silence unused variable warning; we may need ctx in the future. - let _ = #ctx; - let _: Option<()> = (|| { - let #size = ::aya_log_ebpf::macro_support::write_record_header( - #buf, - #target, - #level, - module_path!(), - file!(), - line!(), - #num_args, - )?; - let mut #size = #size.get(); - #( - { - let #buf = #buf.get_mut(#size..)?; - let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; - #size += #len.get(); - } - )* - let #record = #buf.get(..#size)?; - Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) - })(); + { + let #level = #level_expr; + if ::aya_log_ebpf::macro_support::level_enabled(#level) { + match ::aya_log_ebpf::macro_support::AYA_LOG_BUF.get_ptr_mut(0).and_then(|ptr| unsafe { ptr.as_mut() }) { + None => {}, + Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { + // Silence unused variable warning; we may need ctx in the future. + let _ = #ctx; + let _: Option<()> = (|| { + let #size = ::aya_log_ebpf::macro_support::write_record_header( + #buf, + #target, + #level, + module_path!(), + file!(), + line!(), + #num_args, + )?; + let mut #size = #size.get(); + #( + { + let #buf = #buf.get_mut(#size..)?; + let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; + #size += #len.get(); + } + )* + let #record = #buf.get(..#size)?; + Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) + })(); + } } } } diff --git a/test/integration-ebpf/src/log.rs b/test/integration-ebpf/src/log.rs index bff63e1e..d2cc1fc4 100644 --- a/test/integration-ebpf/src/log.rs +++ b/test/integration-ebpf/src/log.rs @@ -83,7 +83,8 @@ pub fn test_log(ctx: ProbeContext) { let no_copy = NoCopy {}; - debug!(&ctx, "{:x}", no_copy.consume()); + // Check usage in expression position. + let () = debug!(&ctx, "{:x}", no_copy.consume()); } }