Skip to content

Commit

Permalink
Enable UI_LOGGER
Browse files Browse the repository at this point in the history
  • Loading branch information
Borja Lorente committed Nov 27, 2018
1 parent d0d094e commit f832238
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 64 deletions.
121 changes: 61 additions & 60 deletions src/rust/engine/src/externs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ use handles::{DroppingHandle, Handle};
use interning::Interns;
use lazy_static::lazy_static;
use parking_lot::RwLock;
use ui::PythonLogLevel;
use ui::TryIntoPythonLogLevel;
use ui::display::UI;
//use ui::PythonLogLevel;
//use ui::TryIntoPythonLogLevel;

pub fn eval(python: &str) -> Result<Value, Failure> {
with_externs(|e| (e.eval)(e.context, python.as_ptr(), python.len() as u64)).into()
Expand Down Expand Up @@ -250,9 +251,9 @@ lazy_static! {
// would need to be acquired for every single logging statement).
// Please don't mutate it.
// Please.
static mut LOGGER: FfiLogger = FfiLogger {
level_filter: log::LevelFilter::Off,
};
//static mut LOGGER: FfiLogger = FfiLogger {
// level_filter: log::LevelFilter::Off,
//};

///
/// Set the static Externs for this process. All other methods of this module will fail
Expand All @@ -265,12 +266,12 @@ pub fn set_externs(externs: Externs) {
*externs_ref = Some(externs);

// TODO Comment to activate the V2 UI
unsafe {
LOGGER.init(log_level);
}
// unsafe {
// LOGGER.init(log_level);
// }

// TODO Uncomment to activate the V2 UI
//display::MasterDisplay::init(log_level);
UI::init(log_level);
}

fn with_externs<F, T>(f: F) -> T
Expand Down Expand Up @@ -611,54 +612,54 @@ where
output
}

///
/// FfiLogger is an implementation of log::Log which asks the Python logging system to log via cffi.
///
struct FfiLogger {
level_filter: log::LevelFilter,
}

impl FfiLogger {
// init must only be called once in the lifetime of the program. No other loggers may be init'd.
// If either of the above are violated, expect a panic.
pub fn init(&'static mut self, max_level: u8) {
let max_python_level = max_level.try_into_PythonLogLevel();
self.level_filter = {
match max_python_level {
Ok(python_level) => {
let level: log::LevelFilter = python_level.into();
level
}
Err(err) => panic!("Unrecognised log level from python: {}: {}", max_level, err),
}
};

log::set_max_level(self.level_filter);
log::set_logger(self)
.expect("Failed to set logger (maybe you tried to call init multiple times?)");
}
}

impl log::Log for FfiLogger {
fn enabled(&self, metadata: &log::Metadata) -> bool {
metadata.level() <= self.level_filter
}

fn log(&self, record: &log::Record) {
if !self.enabled(record.metadata()) {
return;
}
let level: PythonLogLevel = record.level().into();
let message = format!("{}", record.args());
with_externs(|e| {
(e.log)(
e.context,
level as u8,
message.as_ptr(),
message.len() as u64,
)
})
}

fn flush(&self) {}
}
/////
///// FfiLogger is an implementation of log::Log which asks the Python logging system to log via cffi.
/////
//struct FfiLogger {
// level_filter: log::LevelFilter,
//}
//
//impl FfiLogger {
// // init must only be called once in the lifetime of the program. No other loggers may be init'd.
// // If either of the above are violated, expect a panic.
// pub fn init(&'static mut self, max_level: u8) {
// let max_python_level = max_level.try_into_PythonLogLevel();
// self.level_filter = {
// match max_python_level {
// Ok(python_level) => {
// let level: log::LevelFilter = python_level.into();
// level
// }
// Err(err) => panic!("Unrecognised log level from python: {}: {}", max_level, err),
// }
// };
//
// log::set_max_level(self.level_filter);
// log::set_logger(self)
// .expect("Failed to set logger (maybe you tried to call init multiple times?)");
// }
//}
//
//impl log::Log for FfiLogger {
// fn enabled(&self, metadata: &log::Metadata) -> bool {
// metadata.level() <= self.level_filter
// }
//
// fn log(&self, record: &log::Record) {
// if !self.enabled(record.metadata()) {
// return;
// }
// let level: PythonLogLevel = record.level().into();
// let message = format!("{}", record.args());
// with_externs(|e| {
// (e.log)(
// e.context,
// level as u8,
// message.as_ptr(),
// message.len() as u64,
// )
// })
// }
//
// fn flush(&self) {}
//}
9 changes: 5 additions & 4 deletions src/rust/engine/ui/src/display.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::{BTreeMap, VecDeque};
use std::io::Write;
use std::io::{stderr, stdout, Result, Stdout};
use std::io::{stdout, Result, Stdout};
use std::thread;
use std::time::Duration;

Expand Down Expand Up @@ -35,10 +35,11 @@ impl log::Log for UI {
let message = format!("{}", record.args());
let inner_ref = &self.inner.lock();
if inner_ref.is_running() {
// TODO Eventually we want this to be more sophisticated, mimicking the python logger.
write!(stderr(), "{}", message);
} else {
inner_ref.log(message);
} else {
// TODO Eventually we want this to be more sophisticated, mimicking the python logger.
// We might need to output this message to additional files (e.g. the pantsd log)
eprintln!("{}", message);
}
}

Expand Down

0 comments on commit f832238

Please sign in to comment.