pub fn default_logger() -> Arc<Logger>Expand description
Returns the global default logger.
This default logger will be used by logging macros, if the logger
parameter is not specified when logging macros are called.
If the default logger has not been replaced, the default:
-
contains a sink
StdStreamSink, writing logs onLevel::Infoand more verbose levels tostdout. -
contains a sink
StdStreamSink, writing logs onLevel::Warnlevel and more severe levels tostderr. -
level filter ignores logs on
Level::Debugand more verbose levels.However, if you want to enable logging for all levels:
use spdlog::prelude::*; spdlog::default_logger().set_level_filter(LevelFilter::All);
Users can replace the default logger with set_default_logger or
swap_default_logger.
ยงExamples
use spdlog::prelude::*;
let default_logger = spdlog::default_logger();
default_logger.set_level_filter(LevelFilter::All);
info!("this log will be written to `stdout`");
debug!("this log will be written to `stdout`");
trace!("this log will be written to `stdout`");
warn!("this log will be written to `stderr`");
error!("this log will be written to `stderr`");
critical!("this log will be written to `stderr`");Examples found in repository?
examples/native/linux.rs (line 6)
2fn main() -> Result<(), Box<dyn std::error::Error>> {
3 use spdlog::{prelude::*, sink::JournaldSink};
4
5 let sink = JournaldSink::builder().build_arc()?;
6 let logger = spdlog::default_logger().fork_with(|logger| {
7 logger.set_name(Some("demo")).unwrap();
8 logger.sinks_mut().push(sink);
9 Ok(())
10 })?;
11 spdlog::set_default_logger(logger);
12
13 info!("info message from spdlog-rs's JournaldSink");
14 error!("error message from spdlog-rs's JournaldSink", kv: { error_code = 114514 });
15 Ok(())
16}More examples
examples/04-format.rs (line 26)
13fn use_pattern_formatter() {
14 use spdlog::{
15 formatter::{pattern, PatternFormatter},
16 prelude::*,
17 };
18
19 // Building a pattern formatter with a pattern.
20 // The `pattern!` macro will parse the template string at compile-time.
21 let new_formatter = Box::new(PatternFormatter::new(pattern!(
22 "{datetime} - {^{level}} - {payload}{eol}"
23 )));
24
25 // Setting the new formatter for each sink of the default logger.
26 for sink in spdlog::default_logger().sinks() {
27 sink.set_formatter(new_formatter.clone())
28 }
29
30 info!("format by `PatternFormatter`");
31}
32
33fn impl_manually() {
34 use std::fmt::Write;
35
36 use spdlog::{
37 formatter::{Formatter, FormatterContext},
38 prelude::*,
39 Record, StringBuf,
40 };
41
42 #[derive(Clone, Default)]
43 struct MyFormatter;
44
45 impl Formatter for MyFormatter {
46 fn format(
47 &self,
48 record: &Record,
49 dest: &mut StringBuf,
50 ctx: &mut FormatterContext,
51 ) -> spdlog::Result<()> {
52 let style_range_begin = dest.len();
53
54 dest.write_str(&record.level().as_str().to_ascii_uppercase())
55 .map_err(spdlog::Error::FormatRecord)?;
56
57 let style_range_end = dest.len();
58
59 writeln!(dest, " {}", record.payload()).map_err(spdlog::Error::FormatRecord)?;
60
61 ctx.set_style_range(Some(style_range_begin..style_range_end));
62 Ok(())
63 }
64 }
65
66 // Building a custom formatter.
67 let new_formatter = Box::new(MyFormatter);
68
69 // Setting the new formatter for each sink of the default logger.
70 for sink in spdlog::default_logger().sinks() {
71 sink.set_formatter(new_formatter.clone())
72 }
73
74 info!("format by `MyFormatter` (impl manually)");
75}examples/01-macro.rs (line 18)
4fn main() {
5 // Writes a log at "info" level, and this log will be processed by the global
6 // default logger - It will be output to `stdout`.
7 info!("program started");
8
9 // They will be output to `stderr`.
10 let file = "config.json";
11 error!("failed to open file: {}", file);
12 warn!("undetermined locale, defaults to `en_US.UTF-8`");
13
14 // Level "trace" and "debug" will be ignored by default, you can modify the
15 // level filter of the global default logger to enable all levels.
16 let verbose = true;
17 if verbose {
18 spdlog::default_logger().set_level_filter(LevelFilter::All);
19 }
20
21 trace!("position x: {}, y: {}", 11.4, -5.14);
22 // Or if you prefer structured logging.
23 trace!("position", kv: { x = 11.4, y = -5.14 });
24}examples/06-log-crate.rs (line 12)
1fn main() -> Result<(), Box<dyn std::error::Error>> {
2 spdlog::init_log_crate_proxy()
3 .expect("users should only call `init_log_crate_proxy` function once");
4
5 // Setup filter as needed.
6 let filter = env_filter::Builder::new().try_parse("RUST_LOG")?.build();
7 spdlog::log_crate_proxy().set_filter(Some(filter));
8
9 log::set_max_level(log::LevelFilter::Trace);
10 log::trace!("this log will be processed by the global default logger in spdlog-rs");
11
12 let custom_logger = spdlog::default_logger().fork_with_name(Some("another_logger"))?;
13 spdlog::log_crate_proxy().set_logger(Some(custom_logger));
14 log::info!("this log will be processed by custom_logger in spdlog-rs");
15
16 spdlog::log_crate_proxy().set_logger(None);
17 log::trace!("this log will be processed by the global default logger in spdlog-rs");
18
19 Ok(())
20}examples/03-logger.rs (line 11)
8fn main() -> Result<(), Box<dyn std::error::Error>> {
9 // `spdlog-rs` has a global default logger and logs will be processed by it
10 // by default, You can configure it.
11 let default_logger = spdlog::default_logger();
12 default_logger.set_level_filter(LevelFilter::All);
13
14 // Or completely replace it with a new one.
15 let path = env::current_exe()?.with_file_name("all.log");
16 let file_sink = FileSink::builder().path(path).build_arc()?;
17
18 let new_logger = Logger::builder()
19 .level_filter(LevelFilter::All)
20 .flush_level_filter(LevelFilter::MoreSevereEqual(Level::Warn))
21 .sink(file_sink.clone())
22 .build_arc()?;
23 new_logger.set_flush_period(Some(Duration::from_secs(3)));
24 spdlog::set_default_logger(new_logger);
25
26 info!("this log will be written to the file `all.log`");
27
28 // In addition to having the global default logger, more loggers are allowed to
29 // be configured, stored and used independently.
30 let db = AppDatabase::new(file_sink)?;
31 db.write_i32(114514);
32
33 Ok(())
34}