windows: Fix sometimes log error messages don't show the crate name (#18706)

On windows, path could be something like `C:\path\to\the\crate`. Hence,
`split('/')` would refuse to work in this case.

### Before

![Screenshot 2024-10-04
023652](https://github.com/user-attachments/assets/9c14fb24-5ee0-4b56-8fbd-313abb28f134)

### After

![Screenshot 2024-10-04
024115](https://github.com/user-attachments/assets/217e175c-b0e1-4589-9c3d-98670882b185)


Release Notes:

- N/A
This commit is contained in:
Junkui Zhang 2024-10-04 04:00:33 +08:00 committed by GitHub
parent fd22c9bef9
commit 8d6fa9526e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -378,9 +378,13 @@ fn log_error_with_caller<E>(caller: core::panic::Location<'_>, error: E, level:
where
E: std::fmt::Debug,
{
#[cfg(not(target_os = "windows"))]
let file = caller.file();
#[cfg(target_os = "windows")]
let file = caller.file().replace('\\', "/");
// In this codebase, the first segment of the file path is
// the 'crates' folder, followed by the crate name.
let target = caller.file().split('/').nth(1);
let target = file.split('/').nth(1);
log::logger().log(
&log::Record::builder()