mirror of
https://github.com/fluencelabs/wasmer
synced 2025-04-25 18:32:15 +00:00
Update logging to use log
, add command line flag to toggle it
This commit is contained in:
parent
a8ed5b9d1a
commit
12f7416a85
68
Cargo.lock
generated
68
Cargo.lock
generated
@ -138,6 +138,17 @@ version = "0.1.10"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono"
|
||||||
|
version = "0.4.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
|
||||||
|
dependencies = [
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
"time",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "2.33.0"
|
version = "2.33.0"
|
||||||
@ -171,6 +182,17 @@ dependencies = [
|
|||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "1.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8815e2ab78f3a59928fc32e141fbeece88320a240e43f47b2fd64ea3a88a5b3d"
|
||||||
|
dependencies = [
|
||||||
|
"atty",
|
||||||
|
"lazy_static",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "constant_time_eq"
|
name = "constant_time_eq"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
@ -438,6 +460,17 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fern"
|
||||||
|
version = "0.5.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e69ab0d5aca163e388c3a49d284fed6c3d0810700e77c5ae2756a50ec1a4daaa"
|
||||||
|
dependencies = [
|
||||||
|
"chrono",
|
||||||
|
"colored",
|
||||||
|
"log",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fuchsia-cprng"
|
name = "fuchsia-cprng"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -558,7 +591,7 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
"llvm-sys",
|
"llvm-sys",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot 0.10.0",
|
||||||
"regex",
|
"regex",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -827,6 +860,17 @@ dependencies = [
|
|||||||
"md5",
|
"md5",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
|
||||||
|
dependencies = [
|
||||||
|
"lock_api",
|
||||||
|
"parking_lot_core 0.6.2",
|
||||||
|
"rustc_version",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
@ -834,7 +878,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc"
|
checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lock_api",
|
"lock_api",
|
||||||
"parking_lot_core",
|
"parking_lot_core 0.7.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parking_lot_core"
|
||||||
|
version = "0.6.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"cloudabi",
|
||||||
|
"libc",
|
||||||
|
"redox_syscall",
|
||||||
|
"rustc_version",
|
||||||
|
"smallvec 0.6.13",
|
||||||
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1618,7 +1677,9 @@ version = "0.12.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"errno",
|
"errno",
|
||||||
|
"fern",
|
||||||
"glob 0.3.0",
|
"glob 0.3.0",
|
||||||
|
"log",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
"serde",
|
"serde",
|
||||||
"structopt",
|
"structopt",
|
||||||
@ -1679,6 +1740,7 @@ dependencies = [
|
|||||||
"getrandom",
|
"getrandom",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
"log",
|
||||||
"time",
|
"time",
|
||||||
"wasmer-runtime-core",
|
"wasmer-runtime-core",
|
||||||
]
|
]
|
||||||
@ -1800,7 +1862,7 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
"nix",
|
"nix",
|
||||||
"page_size",
|
"page_size",
|
||||||
"parking_lot",
|
"parking_lot 0.9.0",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
"serde",
|
"serde",
|
||||||
"serde-bench",
|
"serde-bench",
|
||||||
|
@ -22,6 +22,9 @@ include = [
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
byteorder = "1.3"
|
byteorder = "1.3"
|
||||||
errno = "0.2"
|
errno = "0.2"
|
||||||
|
fern = { version = "0.5", features = ["colored"], optional = true }
|
||||||
|
# statically turn off logging for wasmer by default, fetaures override this
|
||||||
|
log = "0.4"
|
||||||
structopt = "0.3"
|
structopt = "0.3"
|
||||||
wabt = "0.9.1"
|
wabt = "0.9.1"
|
||||||
wasmer-clif-backend = { path = "lib/clif-backend", optional = true }
|
wasmer-clif-backend = { path = "lib/clif-backend", optional = true }
|
||||||
@ -78,8 +81,8 @@ typetag = "0.1" # used by the plugin example
|
|||||||
[features]
|
[features]
|
||||||
default = ["fast-tests", "wasi", "backend-cranelift"]
|
default = ["fast-tests", "wasi", "backend-cranelift"]
|
||||||
"loader-kernel" = ["wasmer-kernel-loader"]
|
"loader-kernel" = ["wasmer-kernel-loader"]
|
||||||
debug = ["wasmer-runtime-core/debug"]
|
debug = ["wasmer-runtime-core/debug", "fern", "log/max_level_debug", "log/release_max_level_debug"]
|
||||||
trace = ["wasmer-runtime-core/trace"]
|
trace = ["wasmer-runtime-core/trace", "log/max_level_trace", "log/release_max_level_trace"]
|
||||||
docs = ["wasmer-runtime/docs"]
|
docs = ["wasmer-runtime/docs"]
|
||||||
extra-debug = ["wasmer-clif-backend/debug", "wasmer-runtime-core/debug"]
|
extra-debug = ["wasmer-clif-backend/debug", "wasmer-runtime-core/debug"]
|
||||||
# This feature will allow cargo test to run much faster
|
# This feature will allow cargo test to run much faster
|
||||||
|
2
Makefile
2
Makefile
@ -258,7 +258,7 @@ check: check-bench
|
|||||||
|
|
||||||
# Release
|
# Release
|
||||||
release:
|
release:
|
||||||
cargo build --release --features backend-singlepass,backend-cranelift,backend-llvm,loader-kernel,experimental-io-devices
|
cargo build --release --features backend-singlepass,backend-cranelift,backend-llvm,loader-kernel,experimental-io-devices,log/release_max_level_off
|
||||||
|
|
||||||
# Only one backend (cranelift)
|
# Only one backend (cranelift)
|
||||||
release-clif:
|
release-clif:
|
||||||
|
@ -13,6 +13,7 @@ edition = "2018"
|
|||||||
byteorder = "1.3"
|
byteorder = "1.3"
|
||||||
lazy_static = "1.4"
|
lazy_static = "1.4"
|
||||||
libc = "0.2.60"
|
libc = "0.2.60"
|
||||||
|
log = "0.4"
|
||||||
time = "0.1"
|
time = "0.1"
|
||||||
wasmer-runtime-core = { path = "../runtime-core", version = "0.12.0" }
|
wasmer-runtime-core = { path = "../runtime-core", version = "0.12.0" }
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate wasmer_runtime_core;
|
extern crate wasmer_runtime_core;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use std::cell::UnsafeCell;
|
use std::cell::UnsafeCell;
|
||||||
|
@ -1,49 +1,3 @@
|
|||||||
/// Prints a log message with args, similar to println, when the debug feature is enabled.
|
|
||||||
/// If the debug feature is disabled, arguments are not evaluated or printed.
|
|
||||||
#[macro_export]
|
|
||||||
#[cfg(feature = "debug")]
|
|
||||||
macro_rules! debug {
|
|
||||||
($fmt:expr) => (println!(concat!("[{}] wasmer-runtime(:{}) ", $fmt), {
|
|
||||||
let time = ::std::time::SystemTime::now().duration_since(::std::time::UNIX_EPOCH).expect("Can't get time");
|
|
||||||
format!("{}.{:03}", time.as_secs(), time.subsec_millis())
|
|
||||||
}, line!()));
|
|
||||||
($fmt:expr, $($arg:tt)*) => (println!(concat!("[{}] wasmer-runtime(:{}) ", $fmt, "\n"), {
|
|
||||||
let time = ::std::time::SystemTime::now().duration_since(::std::time::UNIX_EPOCH).expect("Can't get time");
|
|
||||||
format!("{}.{:03}", time.as_secs(), time.subsec_millis())
|
|
||||||
}, line!(), $($arg)*));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prints a log message with args, similar to println, when the debug feature is enabled.
|
|
||||||
/// If the debug feature is disabled, arguments are not evaluated or printed.
|
|
||||||
#[macro_export]
|
|
||||||
#[cfg(not(feature = "debug"))]
|
|
||||||
macro_rules! debug {
|
|
||||||
($fmt:expr) => {};
|
|
||||||
($fmt:expr, $($arg:tt)*) => {};
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prints a log message with args, similar to println, when the trace feature is enabled.
|
|
||||||
/// If the trace feature is disabled, arguments are not evaluated or printed.
|
|
||||||
#[macro_export]
|
|
||||||
#[cfg(feature = "trace")]
|
|
||||||
macro_rules! trace {
|
|
||||||
($fmt:expr) => {
|
|
||||||
debug!($fmt)
|
|
||||||
};
|
|
||||||
($fmt:expr, $($arg:tt)*) => {
|
|
||||||
debug!($fmt, $($arg)*);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Prints a log message with args, similar to println, when the trace feature is enabled.
|
|
||||||
/// If the trace feature is disabled, arguments are not evaluated or printed.
|
|
||||||
#[macro_export]
|
|
||||||
#[cfg(not(feature = "trace"))]
|
|
||||||
macro_rules! trace {
|
|
||||||
($fmt:expr) => {};
|
|
||||||
($fmt:expr, $($arg:tt)*) => {};
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper macro to create a new `Func` object using the provided function pointer.
|
/// Helper macro to create a new `Func` object using the provided function pointer.
|
||||||
///
|
///
|
||||||
/// # Usage
|
/// # Usage
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#[cfg(target = "windows")]
|
#[cfg(target = "windows")]
|
||||||
extern crate winapi;
|
extern crate winapi;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
|
@ -3,11 +3,11 @@ macro_rules! wasi_try {
|
|||||||
let res: Result<_, crate::syscalls::types::__wasi_errno_t> = $expr;
|
let res: Result<_, crate::syscalls::types::__wasi_errno_t> = $expr;
|
||||||
match res {
|
match res {
|
||||||
Ok(val) => {
|
Ok(val) => {
|
||||||
wasmer_runtime_core::trace!("wasi::wasi_try::val: {:?}", val);
|
trace!("wasi::wasi_try::val: {:?}", val);
|
||||||
val
|
val
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
wasmer_runtime_core::trace!("wasi::wasi_try::err: {:?}", err);
|
trace!("wasi::wasi_try::err: {:?}", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ use std::{
|
|||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
time::SystemTime,
|
time::SystemTime,
|
||||||
};
|
};
|
||||||
use wasmer_runtime_core::{debug, vm::Ctx};
|
use wasmer_runtime_core::vm::Ctx;
|
||||||
|
|
||||||
/// the fd value of the virtual root
|
/// the fd value of the virtual root
|
||||||
pub const VIRTUAL_ROOT_FD: __wasi_fd_t = 3;
|
pub const VIRTUAL_ROOT_FD: __wasi_fd_t = 3;
|
||||||
|
@ -9,7 +9,6 @@ use std::{
|
|||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
time::SystemTime,
|
time::SystemTime,
|
||||||
};
|
};
|
||||||
use wasmer_runtime_core::debug;
|
|
||||||
|
|
||||||
/// Error type for external users
|
/// Error type for external users
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use crate::ptr::{Array, WasmPtr};
|
use crate::ptr::{Array, WasmPtr};
|
||||||
use crate::syscalls;
|
use crate::syscalls;
|
||||||
use crate::syscalls::types::{self, snapshot0};
|
use crate::syscalls::types::{self, snapshot0};
|
||||||
use wasmer_runtime_core::{debug, vm::Ctx};
|
use wasmer_runtime_core::vm::Ctx;
|
||||||
|
|
||||||
/// Wrapper around `syscalls::fd_filestat_get` with extra logic to handle the size
|
/// Wrapper around `syscalls::fd_filestat_get` with extra logic to handle the size
|
||||||
/// difference of `wasi_filestat_t`
|
/// difference of `wasi_filestat_t`
|
||||||
|
@ -21,7 +21,7 @@ use std::borrow::Borrow;
|
|||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::convert::{Infallible, TryInto};
|
use std::convert::{Infallible, TryInto};
|
||||||
use std::io::{self, Read, Seek, Write};
|
use std::io::{self, Read, Seek, Write};
|
||||||
use wasmer_runtime_core::{debug, memory::Memory, vm::Ctx};
|
use wasmer_runtime_core::{memory::Memory, vm::Ctx};
|
||||||
|
|
||||||
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
||||||
pub use unix::*;
|
pub use unix::*;
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
unreachable_patterns
|
unreachable_patterns
|
||||||
)]
|
)]
|
||||||
extern crate structopt;
|
extern crate structopt;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::env;
|
use std::env;
|
||||||
@ -37,7 +39,6 @@ use wasmer_runtime_core::tiering::{run_tiering, InteractiveShellContext, ShellEx
|
|||||||
use wasmer_runtime_core::{
|
use wasmer_runtime_core::{
|
||||||
self,
|
self,
|
||||||
backend::{Compiler, CompilerConfig, Features, MemoryBoundCheckMode},
|
backend::{Compiler, CompilerConfig, Features, MemoryBoundCheckMode},
|
||||||
debug,
|
|
||||||
loader::{Instance as LoadedInstance, LocalLoader},
|
loader::{Instance as LoadedInstance, LocalLoader},
|
||||||
Module,
|
Module,
|
||||||
};
|
};
|
||||||
@ -247,6 +248,11 @@ struct Run {
|
|||||||
#[structopt(long = "enable-experimental-io-devices", hidden = true)]
|
#[structopt(long = "enable-experimental-io-devices", hidden = true)]
|
||||||
enable_experimental_io_devices: bool,
|
enable_experimental_io_devices: bool,
|
||||||
|
|
||||||
|
/// Enable debug output
|
||||||
|
#[cfg(feature = "debug")]
|
||||||
|
#[structopt(long = "debug", short = "d")]
|
||||||
|
debug: bool,
|
||||||
|
|
||||||
/// Application arguments
|
/// Application arguments
|
||||||
#[structopt(name = "--", multiple = true)]
|
#[structopt(name = "--", multiple = true)]
|
||||||
args: Vec<String>,
|
args: Vec<String>,
|
||||||
@ -978,6 +984,12 @@ fn get_backend(backend: Backend, path: &PathBuf) -> Backend {
|
|||||||
|
|
||||||
fn run(options: &mut Run) {
|
fn run(options: &mut Run) {
|
||||||
options.backend = get_backend(options.backend, &options.path);
|
options.backend = get_backend(options.backend, &options.path);
|
||||||
|
#[cfg(feature = "debug")]
|
||||||
|
{
|
||||||
|
if options.debug {
|
||||||
|
logging::set_up_logging().expect("failed to set up logging");
|
||||||
|
}
|
||||||
|
}
|
||||||
match execute_wasm(options) {
|
match execute_wasm(options) {
|
||||||
Ok(()) => {}
|
Ok(()) => {}
|
||||||
Err(message) => {
|
Err(message) => {
|
||||||
|
@ -10,11 +10,13 @@
|
|||||||
#![doc(html_favicon_url = "https://wasmer.io/static/icons/favicon.ico")]
|
#![doc(html_favicon_url = "https://wasmer.io/static/icons/favicon.ico")]
|
||||||
#![doc(html_logo_url = "https://avatars3.githubusercontent.com/u/44205449?s=200&v=4")]
|
#![doc(html_logo_url = "https://avatars3.githubusercontent.com/u/44205449?s=200&v=4")]
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate wasmer_runtime_core;
|
extern crate wasmer_runtime_core;
|
||||||
// extern crate wasmer_emscripten;
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod update;
|
pub mod update;
|
||||||
|
#[cfg(feature = "debug")]
|
||||||
|
pub mod logging;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
pub mod webassembly;
|
pub mod webassembly;
|
||||||
|
55
src/logging.rs
Normal file
55
src/logging.rs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
use crate::utils::wasmer_should_print_color;
|
||||||
|
use fern::colors::{Color, ColoredLevelConfig};
|
||||||
|
use std::time;
|
||||||
|
|
||||||
|
/// Subroutine to instantiate the loggers
|
||||||
|
pub fn set_up_logging() -> Result<(), String> {
|
||||||
|
let colors_line = ColoredLevelConfig::new()
|
||||||
|
.error(Color::Red)
|
||||||
|
.warn(Color::Yellow)
|
||||||
|
.trace(Color::BrightBlack);
|
||||||
|
let should_color = wasmer_should_print_color();
|
||||||
|
|
||||||
|
let colors_level = colors_line.info(Color::Green);
|
||||||
|
let dispatch = fern::Dispatch::new()
|
||||||
|
.level(log::LevelFilter::Debug)
|
||||||
|
.chain({
|
||||||
|
let base = if should_color {
|
||||||
|
fern::Dispatch::new().format(move |out, message, record| {
|
||||||
|
let time = time::SystemTime::now().duration_since(time::UNIX_EPOCH).expect("Can't get time");
|
||||||
|
out.finish(format_args!(
|
||||||
|
"{color_line}[{seconds}.{millis} {level} {target}{color_line}]{ansi_close} {message}",
|
||||||
|
color_line = format_args!(
|
||||||
|
"\x1B[{}m",
|
||||||
|
colors_line.get_color(&record.level()).to_fg_str()
|
||||||
|
),
|
||||||
|
seconds = time.as_secs(),
|
||||||
|
millis = time.subsec_millis(),
|
||||||
|
level = colors_level.color(record.level()),
|
||||||
|
target = record.target(),
|
||||||
|
ansi_close = "\x1B[0m",
|
||||||
|
message = message,
|
||||||
|
));
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// default formatter without color
|
||||||
|
fern::Dispatch::new().format(move |out, message, record| {
|
||||||
|
let time = time::SystemTime::now().duration_since(time::UNIX_EPOCH).expect("Can't get time");
|
||||||
|
out.finish(format_args!(
|
||||||
|
"[{seconds}.{millis} {level} {target}] {message}",
|
||||||
|
seconds = time.as_secs(),
|
||||||
|
millis = time.subsec_millis(),
|
||||||
|
level = record.level(),
|
||||||
|
target = record.target(),
|
||||||
|
message = message,
|
||||||
|
));
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
base.chain(std::io::stdout())
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch.apply().map_err(|e| format!("{}", e))?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
@ -119,3 +119,10 @@ pub fn parse_args(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Whether or not Wasmer should print with color
|
||||||
|
pub fn wasmer_should_print_color() -> bool {
|
||||||
|
std::env::var("WASMER_DISABLE_COLOR")
|
||||||
|
.map(|_| false)
|
||||||
|
.unwrap_or(true)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user