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}