web_console_logger/lib.rs
1//! A logger for the wasm32-unknown-unknown target that prints all messages to
2//! the web console
3//!
4//! ## Usage
5//!
6//! ```no_run
7//! #[macro_use]
8//! extern crate log;
9//! extern crate web_console_logger;
10//! extern crate wasm_bindgen;
11//!
12//! use wasm_bindgen::prelude::*;
13//!
14//! #[wasm_bindgen]
15//! pub fn main() {
16//! web_console_logger::init().unwrap();
17//! // OR
18//! // web_console_logger::init_with_level(log::Level::Trace).unwrap();
19//!
20//! trace!("This example message will be logged to the web browser's javascript console.");
21//!
22//! web_console_logger::set_level(log::Level::Warn);
23//!
24//! trace!("This will not be logged, because the log level is now `Warn`.");
25//! warn!("This will be logged, though.");
26//! }
27//! ```
28//!
29//! ## License
30//!
31//! Web Console Logger is licensed under either of
32//!
33//! * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
34//! http://www.apache.org/licenses/LICENSE-2.0)
35//! * MIT license ([LICENSE-MIT](LICENSE-MIT) or
36//! http://opensource.org/licenses/MIT)
37//!
38//! at your option.
39
40extern crate log;
41extern crate wasm_bindgen;
42extern crate web_sys;
43
44use wasm_bindgen::prelude::*;
45
46use log::{Level, Log, Metadata, Record, SetLoggerError};
47
48struct WebConsoleLogger;
49
50static LOGGER: WebConsoleLogger = WebConsoleLogger;
51
52impl Log for WebConsoleLogger {
53 fn enabled(&self, _metadata: &Metadata) -> bool {
54 true
55 }
56
57 fn log(&self, record: &Record) {
58 web_sys::console::log_1(&JsValue::from_str(
59 format!(
60 "{:<5} [{}] {}",
61 record.level().to_string(),
62 record.module_path().unwrap_or_default(),
63 record.args()
64 ).as_str(),
65 ));
66 }
67
68 fn flush(&self) {}
69}
70
71/// Initializes logging with the provided maximum log level.
72pub fn init_with_level(level: Level) -> Result<(), SetLoggerError> {
73 log::set_logger(&LOGGER)?;
74 log::set_max_level(level.to_level_filter());
75 Ok(())
76}
77
78/// Initializes logging with a maximum log level of `Level::Trace`.
79pub fn init() -> Result<(), SetLoggerError> {
80 init_with_level(Level::Trace)
81}
82
83/// Dynamically set the log level.
84pub fn set_level(level: Level) {
85 log::set_max_level(level.to_level_filter());
86}