aboutsummaryrefslogtreecommitdiff
path: root/crates/rust-analyzer/src/bin/logger.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rust-analyzer/src/bin/logger.rs')
-rw-r--r--crates/rust-analyzer/src/bin/logger.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/rust-analyzer/src/bin/logger.rs b/crates/rust-analyzer/src/bin/logger.rs
index 3bcb1ae37..4ea4ffafb 100644
--- a/crates/rust-analyzer/src/bin/logger.rs
+++ b/crates/rust-analyzer/src/bin/logger.rs
@@ -2,10 +2,7 @@
2//! filter syntax. Amusingly, there's no crates.io crate that can do this and 2//! filter syntax. Amusingly, there's no crates.io crate that can do this and
3//! only this. 3//! only this.
4 4
5use std::{ 5use std::{borrow::BorrowMut, fs::File, io::{BufWriter, Write}};
6 fs::File,
7 io::{BufWriter, Write},
8};
9 6
10use env_logger::filter::{Builder, Filter}; 7use env_logger::filter::{Builder, Filter};
11use log::{Log, Metadata, Record}; 8use log::{Log, Metadata, Record};
@@ -14,10 +11,11 @@ use parking_lot::Mutex;
14pub(crate) struct Logger { 11pub(crate) struct Logger {
15 filter: Filter, 12 filter: Filter,
16 file: Option<Mutex<BufWriter<File>>>, 13 file: Option<Mutex<BufWriter<File>>>,
14 no_buffering: bool,
17} 15}
18 16
19impl Logger { 17impl Logger {
20 pub(crate) fn new(log_file: Option<File>, filter: Option<&str>) -> Logger { 18 pub(crate) fn new(log_file: Option<File>, no_buffering: bool, filter: Option<&str>) -> Logger {
21 let filter = { 19 let filter = {
22 let mut builder = Builder::new(); 20 let mut builder = Builder::new();
23 if let Some(filter) = filter { 21 if let Some(filter) = filter {
@@ -28,7 +26,7 @@ impl Logger {
28 26
29 let file = log_file.map(|it| Mutex::new(BufWriter::new(it))); 27 let file = log_file.map(|it| Mutex::new(BufWriter::new(it)));
30 28
31 Logger { filter, file } 29 Logger { filter, file, no_buffering }
32 } 30 }
33 31
34 pub(crate) fn install(self) { 32 pub(crate) fn install(self) {
@@ -55,6 +53,10 @@ impl Log for Logger {
55 record.module_path().unwrap_or_default(), 53 record.module_path().unwrap_or_default(),
56 record.args(), 54 record.args(),
57 ); 55 );
56
57 if self.no_buffering {
58 w.lock().borrow_mut().flush().unwrap();
59 }
58 } 60 }
59 None => eprintln!( 61 None => eprintln!(
60 "[{} {}] {}", 62 "[{} {}] {}",