mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Allow console commands to appear in log files (#37631)
This enables console.* commands in javascript to be forwarded to the logger and not just stdout. The domain for this will be `script::dom::console` which seems appropate. Testing: Logs do not have any tests. Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
This commit is contained in:
parent
5fdd8ee277
commit
208d4c620a
4 changed files with 30 additions and 14 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1647,6 +1647,7 @@ dependencies = [
|
||||||
"embedder_traits",
|
"embedder_traits",
|
||||||
"http 1.3.1",
|
"http 1.3.1",
|
||||||
"ipc-channel",
|
"ipc-channel",
|
||||||
|
"log",
|
||||||
"malloc_size_of_derive",
|
"malloc_size_of_derive",
|
||||||
"net_traits",
|
"net_traits",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
|
@ -64,7 +64,7 @@ impl Console {
|
||||||
) {
|
) {
|
||||||
let cx = GlobalScope::get_cx();
|
let cx = GlobalScope::get_cx();
|
||||||
|
|
||||||
let mut log: ConsoleMessageBuilder = Console::build_message(level);
|
let mut log: ConsoleMessageBuilder = Console::build_message(level.clone());
|
||||||
for message in &messages {
|
for message in &messages {
|
||||||
log.add_argument(console_argument_from_handle_value(cx, *message));
|
log.add_argument(console_argument_from_handle_value(cx, *message));
|
||||||
}
|
}
|
||||||
|
@ -75,8 +75,12 @@ impl Console {
|
||||||
|
|
||||||
Console::send_to_devtools(global, log.finish());
|
Console::send_to_devtools(global, log.finish());
|
||||||
|
|
||||||
|
let msgs = stringify_handle_values(&messages);
|
||||||
// Also log messages to stdout
|
// Also log messages to stdout
|
||||||
console_messages(global, messages)
|
console_message(global, &msgs);
|
||||||
|
|
||||||
|
// Also output to the logger which will be at script::dom::console
|
||||||
|
log!(level.into(), "{}", &msgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_to_devtools(global: &GlobalScope, message: ConsoleMessage) {
|
fn send_to_devtools(global: &GlobalScope, message: ConsoleMessage) {
|
||||||
|
@ -93,7 +97,7 @@ impl Console {
|
||||||
// Directly logs a DOMString, without processing the message
|
// Directly logs a DOMString, without processing the message
|
||||||
pub(crate) fn internal_warn(global: &GlobalScope, message: DOMString) {
|
pub(crate) fn internal_warn(global: &GlobalScope, message: DOMString) {
|
||||||
Console::send_string_message(global, LogLevel::Warn, String::from(message.clone()));
|
Console::send_string_message(global, LogLevel::Warn, String::from(message.clone()));
|
||||||
console_message(global, message);
|
console_message(global, &message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,12 +334,7 @@ fn stringify_handle_values(messages: &[HandleValue]) -> DOMString {
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn console_messages(global: &GlobalScope, messages: Vec<HandleValue>) {
|
fn console_message(global: &GlobalScope, message: &DOMString) {
|
||||||
let message = stringify_handle_values(&messages);
|
|
||||||
console_message(global, message)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn console_message(global: &GlobalScope, message: DOMString) {
|
|
||||||
with_stderr_lock(move || {
|
with_stderr_lock(move || {
|
||||||
let prefix = global.current_group_label().unwrap_or_default();
|
let prefix = global.current_group_label().unwrap_or_default();
|
||||||
let message = format!("{}{}", prefix, message);
|
let message = format!("{}{}", prefix, message);
|
||||||
|
@ -392,7 +391,7 @@ impl consoleMethods<crate::DomTypeHolder> for Console {
|
||||||
let message = format!("Assertion failed: {}", stringify_handle_values(&messages));
|
let message = format!("Assertion failed: {}", stringify_handle_values(&messages));
|
||||||
|
|
||||||
Console::send_string_message(global, LogLevel::Log, message.clone());
|
Console::send_string_message(global, LogLevel::Log, message.clone());
|
||||||
console_message(global, DOMString::from(message));
|
console_message(global, &DOMString::from(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +400,7 @@ impl consoleMethods<crate::DomTypeHolder> for Console {
|
||||||
if let Ok(()) = global.time(label.clone()) {
|
if let Ok(()) = global.time(label.clone()) {
|
||||||
let message = format!("{label}: timer started");
|
let message = format!("{label}: timer started");
|
||||||
Console::send_string_message(global, LogLevel::Log, message.clone());
|
Console::send_string_message(global, LogLevel::Log, message.clone());
|
||||||
console_message(global, DOMString::from(message));
|
console_message(global, &DOMString::from(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,7 +410,7 @@ impl consoleMethods<crate::DomTypeHolder> for Console {
|
||||||
let message = format!("{label}: {delta}ms {}", stringify_handle_values(&data));
|
let message = format!("{label}: {delta}ms {}", stringify_handle_values(&data));
|
||||||
|
|
||||||
Console::send_string_message(global, LogLevel::Log, message.clone());
|
Console::send_string_message(global, LogLevel::Log, message.clone());
|
||||||
console_message(global, DOMString::from(message));
|
console_message(global, &DOMString::from(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +420,7 @@ impl consoleMethods<crate::DomTypeHolder> for Console {
|
||||||
let message = format!("{label}: {delta}ms");
|
let message = format!("{label}: {delta}ms");
|
||||||
|
|
||||||
Console::send_string_message(global, LogLevel::Log, message.clone());
|
Console::send_string_message(global, LogLevel::Log, message.clone());
|
||||||
console_message(global, DOMString::from(message));
|
console_message(global, &DOMString::from(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -446,7 +445,7 @@ impl consoleMethods<crate::DomTypeHolder> for Console {
|
||||||
let message = format!("{label}: {count}");
|
let message = format!("{label}: {count}");
|
||||||
|
|
||||||
Console::send_string_message(global, LogLevel::Log, message.clone());
|
Console::send_string_message(global, LogLevel::Log, message.clone());
|
||||||
console_message(global, DOMString::from(message));
|
console_message(global, &DOMString::from(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <https://console.spec.whatwg.org/#countreset>
|
/// <https://console.spec.whatwg.org/#countreset>
|
||||||
|
|
|
@ -14,6 +14,7 @@ path = "lib.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
base = { workspace = true }
|
base = { workspace = true }
|
||||||
bitflags = { workspace = true }
|
bitflags = { workspace = true }
|
||||||
|
log = { workspace = true }
|
||||||
http = { workspace = true }
|
http = { workspace = true }
|
||||||
ipc-channel = { workspace = true }
|
ipc-channel = { workspace = true }
|
||||||
malloc_size_of = { workspace = true }
|
malloc_size_of = { workspace = true }
|
||||||
|
|
|
@ -308,6 +308,21 @@ pub enum LogLevel {
|
||||||
Trace,
|
Trace,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<LogLevel> for log::Level {
|
||||||
|
fn from(value: LogLevel) -> Self {
|
||||||
|
match value {
|
||||||
|
LogLevel::Log => log::Level::Info,
|
||||||
|
LogLevel::Clear => log::Level::Info,
|
||||||
|
|
||||||
|
LogLevel::Debug => log::Level::Debug,
|
||||||
|
LogLevel::Info => log::Level::Info,
|
||||||
|
LogLevel::Warn => log::Level::Warn,
|
||||||
|
LogLevel::Error => log::Level::Error,
|
||||||
|
LogLevel::Trace => log::Level::Trace,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A console message as it is sent from script to the constellation
|
/// A console message as it is sent from script to the constellation
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue