Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 11 additions & 16 deletions src/log.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,27 @@ use crate::{ConsoleSet, PrintConsoleLine};

/// Buffers logs written by bevy at runtime
#[derive(Resource)]
pub struct BevyLogBuffer(Arc<Mutex<std::io::Cursor<Vec<u8>>>>);
pub struct BevyLogBuffer(Arc<Mutex<Vec<u8>>>);

/// Writer implementation which writes into a buffer resource inside the bevy world
pub struct BevyLogBufferWriter(Arc<Mutex<std::io::Cursor<Vec<u8>>>>);
pub struct BevyLogBufferWriter(Arc<Mutex<Vec<u8>>>);

impl Write for BevyLogBufferWriter {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
// let lock = self.0.upgrade().unwrap();
let mut lock = self.0.lock().map_err(|e| {
std::io::Error::new(
std::io::ErrorKind::Other,
format!("Failed to lock buffer: {}", e),
)
})?;
let mut lock = self
.0
.lock()
.map_err(|e| std::io::Error::other(format!("Failed to lock buffer: {}", e)))?;
lock.write(buf)
}

fn flush(&mut self) -> std::io::Result<()> {
// let lock = self.0.upgrade().unwrap();
let mut lock = self.0.lock().map_err(|e| {
std::io::Error::new(
std::io::ErrorKind::Other,
format!("Failed to lock buffer: {}", e),
)
})?;
let mut lock = self
.0
.lock()
.map_err(|e| std::io::Error::other(format!("Failed to lock buffer: {}", e)))?;
lock.flush()
}
}
Expand All @@ -49,7 +45,6 @@ pub fn send_log_buffer_to_console(
) {
let mut buffer = buffer.0.lock().unwrap();
// read and clean buffer
let buffer = buffer.get_mut();
for line in buffer.lines().map_while(Result::ok) {
console_lines.write(PrintConsoleLine { line });
}
Expand Down Expand Up @@ -92,7 +87,7 @@ fn setup_layer(
app: &mut App,
filter: Option<EnvFilter>,
) -> Option<Box<dyn tracing_subscriber::Layer<Registry> + Send + Sync>> {
let buffer = Arc::new(Mutex::new(std::io::Cursor::new(Vec::new())));
let buffer = Arc::new(Mutex::new(Vec::new()));
app.insert_resource(BevyLogBuffer(buffer.clone()));
app.add_systems(
Update,
Expand Down