error[E0515]: cannot return value referencing temporary value

Sorry I know this is a duplicate but I can't manage to fix it.

use env_logger::{Builder, WriteStyle};

use log::{Level, LevelFilter, Log, MetadataBuilder, Record};

#[cfg(feature = "unstable-kv")]
static KVS: (&str, &str) = ("test", "something");

fn record(message: &str) -> Record<'static> {
  let error_metadata = MetadataBuilder::new()
    .target("myApp")
    .level(Level::Error)
    .build();

  let mut builder = Record::builder();
  builder
    .metadata(error_metadata)
    .args(format_args!("{}", message)) // Use message variable in format_args
    .line(Some(433))
    .file(Some("app.rs"))
    .module_path(Some("server"));
  #[cfg(feature = "unstable-kv")] {
    builder.key_values(&KVS);
  }
  builder.build()
}

fn main() {
  let stylish_logger = Builder::new()
    .filter(None, LevelFilter::Error)
    .write_style(WriteStyle::Always)
    .build();

  let unstylish_logger = Builder::new()
    .filter(None, LevelFilter::Error)
    .write_style(WriteStyle::Never)
    .build();

  let my_message = "This is a custom error message";
  stylish_logger.log(&record(my_message));
  unstylish_logger.log(&record(my_message));
}

How do I fix the above error

Please always post the full error from cargo build in the terminal.

1 Like

You could take Arguments<'_> instead of &str.

fn record(message: Arguments<'_>) -> Record<'_> {
    // ...
}

    stylish_logger.log(&record(format_args!("{my_message}")));
    unstylish_logger.log(&record(format_args!("{my_message}")));

I don't think there's a way around format_args! borrowing its inputs.

1 Like

I abandonded the approach for something simpler. But I'll try this tomorrow see if it works and mark this as a solution.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.