diff options
Diffstat (limited to 'crates/rust-analyzer/src/bin/logger.rs')
-rw-r--r-- | crates/rust-analyzer/src/bin/logger.rs | 14 |
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 | ||
5 | use std::{ | 5 | use std::{borrow::BorrowMut, fs::File, io::{BufWriter, Write}}; |
6 | fs::File, | ||
7 | io::{BufWriter, Write}, | ||
8 | }; | ||
9 | 6 | ||
10 | use env_logger::filter::{Builder, Filter}; | 7 | use env_logger::filter::{Builder, Filter}; |
11 | use log::{Log, Metadata, Record}; | 8 | use log::{Log, Metadata, Record}; |
@@ -14,10 +11,11 @@ use parking_lot::Mutex; | |||
14 | pub(crate) struct Logger { | 11 | pub(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 | ||
19 | impl Logger { | 17 | impl 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 | "[{} {}] {}", |