Function spdlog::init_env_level
source · pub fn init_env_level() -> Result<bool, EnvLevelError>
Expand description
Initialize environment variable level filters from environment variable
SPDLOG_RS_LEVEL
.
Returns whether the level in the environment variable was applied if there are no errors.
The default level filter of loggers built after calling this function will
be configured based on the value of environment variable SPDLOG_RS_LEVEL
.
If you want to read from a custom environment variable, see
init_env_level_from
.
Users should call this function early, the level filter of loggers built before calling this function will not be configured by environment variable.
§Formats of the environment variable value
The levels contained in the environment variable mean
LevelFilter::MoreSevereEqual(level)
.
-
Specifies the level filter for the default logger.
Possible inputs:
off
,trace
,warn
,all
, etc.
-
Specifies the level filter for unnamed loggers.
Possible inputs:
=off
,=info
,=error
,=all
, etc.
-
Specifies the level filter for loggers with the specified name.
Possible inputs:
logger-name=info
,network=warn
,core=info
,gui=critical
, etc.
-
Specifies the level filter for all loggers except the default logger (respect the above rules first if they are matched).
Possible inputs:
*=error
,*=off
,*=critical
, etc.
The levels are not case-sensitive, and these rules are combinable, separated by commas.
For example, these are legal:
-
ALL,*=ALL
Specifies the level filter for all loggers as
LevelFilter::All
.
-
off,*=ERROR
Specifies the level filter for the default logger as
LevelFilter::Off
, the rest of loggers asLevelFilter::MoreSevereEqual(Level::Error)
.
-
gui=warn,network=trace
Specifies the level filter for loggers with name “gui” as
LevelFilter::MoreSevereEqual(Level::Warn)
, loggers with name “network” asLevelFilter::MoreSevereEqual(Level::Trace)
.
However, the same rule cannot be specified more than once.
§Examples
-
Environment variable
SPDLOG_RS_LEVEL
is not present:use spdlog::prelude::*; assert_eq!(spdlog::init_env_level()?, false); assert_eq!( spdlog::default_logger().level_filter(), LevelFilter::MoreSevereEqual(Level::Info) // default level filter ); assert_eq!( Logger::builder().build()?.level_filter(), // unnamed logger LevelFilter::MoreSevereEqual(Level::Info) // default level filter ); assert_eq!( Logger::builder().name("gui").build()?.level_filter(), LevelFilter::MoreSevereEqual(Level::Info) // default level filter ); assert_eq!( Logger::builder().name("network").build()?.level_filter(), LevelFilter::MoreSevereEqual(Level::Info) // default level filter );
-
SPDLOG_RS_LEVEL="TRACE,network=Warn,*=error"
:use spdlog::prelude::*; assert_eq!(spdlog::init_env_level()?, true); assert_eq!( spdlog::default_logger().level_filter(), LevelFilter::MoreSevereEqual(Level::Trace) ); assert_eq!( Logger::builder().build()?.level_filter(), // unnamed logger LevelFilter::MoreSevereEqual(Level::Error) ); assert_eq!( Logger::builder().name("gui").build()?.level_filter(), LevelFilter::MoreSevereEqual(Level::Error) ); assert_eq!( Logger::builder().name("network").build()?.level_filter(), LevelFilter::MoreSevereEqual(Level::Warn) );
-
SPDLOG_RS_LEVEL="network=Warn,network=Warn"
will fail, as the same rule is specified multiple times.assert!(matches!( spdlog::init_env_level(), Err(spdlog::error::EnvLevelError::ParseEnvVar(_)) ));