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 as LevelFilter::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” as LevelFilter::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(_))
    ));