Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ env:
# - src/lib.rs
# - Cargo.toml
# - README.md
rust_minver: 1.61.0
rust_minver: 1.63.0

defaults:
run:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ When updating this, also update:
- Cargo.toml
-->

The current minimum supported Rust version is 1.61.
The current minimum supported Rust version is 1.63.

`spdlog-rs` is built against the latest Rust stable release, it is not guaranteed to build on Rust versions earlier than the minimum supported version.

Expand Down
2 changes: 1 addition & 1 deletion spdlog-internal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "spdlog-internal"
version = "0.1.0"
edition = "2021"
rust-version = "1.61"
rust-version = "1.63"
description = "Internal private common code for crate \"spdlog-rs\""
repository = "https://github.com/SpriteOvO/spdlog-rs"
license = "MIT OR Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion spdlog-macros/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "spdlog-macros"
version = "0.2.0"
edition = "2021"
rust-version = "1.61"
rust-version = "1.63"
description = "Macros implementation of crate \"spdlog-rs\""
repository = "https://github.com/SpriteOvO/spdlog-rs"
license = "MIT OR Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion spdlog-macros/src/normalize_forward.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ pub fn normalize(normalize: Normalize) -> syn::Result<TokenStream> {
.find_map(|allowed| {
allowed
.as_optional_mut()
.and_then(|allowed| (allowed.name == input_arg.name).then(|| allowed))
.and_then(|allowed| (allowed.name == input_arg.name).then_some(allowed))
})
.ok_or_else(|| {
syn::Error::new(
Expand Down
3 changes: 2 additions & 1 deletion spdlog/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "spdlog-rs"
version = "0.4.3"
edition = "2021"
rust-version = "1.61"
rust-version = "1.63"
description = "Fast, highly configurable Rust logging crate, inspired by the C++ logging library spdlog"
repository = "https://github.com/SpriteOvO/spdlog-rs"
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -53,6 +53,7 @@ if_chain = "1.0.2"
is-terminal = "0.4"
log = { version = "0.4.21", optional = true, features = ["kv"] }
once_cell = "1.16.0"
parking_lot = "0.12.0"
serde = { version = "1.0.163", optional = true, features = ["derive"] }
serde_json = { version = "1.0.120", optional = true }
spdlog-internal = { version = "=0.1.0", path = "../spdlog-internal", optional = true }
Expand Down
10 changes: 5 additions & 5 deletions spdlog/benches/spdlog-rs/pattern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use spdlog::formatter::JsonFormatter;
use spdlog::{
formatter::{pattern, Formatter, FormatterContext, FullFormatter, Pattern, PatternFormatter},
prelude::*,
sink::Sink,
sink::{Sink, SinkAccess},
Record, StringBuf,
};
use spdlog_macros::runtime_pattern;
Expand Down Expand Up @@ -56,7 +56,9 @@ impl<F: Formatter> Sink for BenchSink<'_, F> {
fn flush(&self) -> spdlog::Result<()> {
unimplemented!()
}
}

impl<F: Formatter> SinkAccess for BenchSink<'_, F> {
fn level_filter(&self) -> LevelFilter {
LevelFilter::All
}
Expand Down Expand Up @@ -86,12 +88,10 @@ fn bench_pattern(bencher: &mut Bencher, pattern: impl Pattern + Clone + 'static)
}

fn bench_full_pattern(bencher: &mut Bencher, pattern: impl Pattern + Clone + 'static) {
let full_formatter = Arc::new(StringSink::with(|b| {
b.formatter(Box::new(FullFormatter::new()))
}));
let full_formatter = Arc::new(StringSink::with(|b| b.formatter(FullFormatter::new())));

let full_pattern = Arc::new(StringSink::with(|b| {
b.formatter(Box::new(PatternFormatter::new(pattern.clone())))
b.formatter(PatternFormatter::new(pattern.clone()))
}));

let combination =
Expand Down
44 changes: 14 additions & 30 deletions spdlog/examples/05_sink.rs
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
use std::sync::{Arc, Mutex, RwLock};
use std::sync::{Arc, Mutex};

use atomic::{Atomic, Ordering};
use spdlog::{
formatter::{Formatter, FormatterContext, FullFormatter},
formatter::FormatterContext,
prelude::*,
sink::Sink,
ErrorHandler, Record, StringBuf,
sink::{GetSinkProp, Sink, SinkProp},
Record, StringBuf,
};

struct CollectVecSink {
level_filter: Atomic<LevelFilter>,
formatter: RwLock<Box<dyn Formatter>>,
error_handler: Atomic<Option<ErrorHandler>>,
prop: SinkProp,
collected: Mutex<Vec<String>>,
}

impl CollectVecSink {
fn new() -> Self {
Self {
level_filter: Atomic::new(LevelFilter::All),
formatter: RwLock::new(Box::new(FullFormatter::new())),
error_handler: Atomic::new(None),
prop: SinkProp::default(),
collected: Mutex::new(Vec::new()),
}
}
Expand All @@ -30,13 +25,18 @@ impl CollectVecSink {
}
}

impl GetSinkProp for CollectVecSink {
fn prop(&self) -> &SinkProp {
&self.prop
}
}

impl Sink for CollectVecSink {
fn log(&self, record: &Record) -> spdlog::Result<()> {
let mut string_buf = StringBuf::new();
let mut ctx = FormatterContext::new();
self.formatter
.read()
.unwrap()
self.prop
.formatter()
.format(record, &mut string_buf, &mut ctx)?;
self.collected.lock().unwrap().push(string_buf.to_string());
Ok(())
Expand All @@ -45,22 +45,6 @@ impl Sink for CollectVecSink {
fn flush(&self) -> spdlog::Result<()> {
Ok(())
}

fn level_filter(&self) -> LevelFilter {
self.level_filter.load(Ordering::Relaxed)
}

fn set_level_filter(&self, level_filter: LevelFilter) {
self.level_filter.store(level_filter, Ordering::Relaxed);
}

fn set_formatter(&self, formatter: Box<dyn Formatter>) {
*self.formatter.write().unwrap() = formatter;
}

fn set_error_handler(&self, handler: Option<ErrorHandler>) {
self.error_handler.store(handler, Ordering::Relaxed);
}
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
Expand Down
11 changes: 8 additions & 3 deletions spdlog/src/formatter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//! Each normal *Sink* owns a *Formatter*, which is used to format each log.
//!
//! The default formatter for most sinks is [`FullFormatter`], you can call
//! [`Sink::set_formatter`] to replace it with another formatter.
//! [`SinkAccess::set_formatter`] to replace it with another formatter.
//!
//! The easiest way to make a custom formatter is to build a pattern, see
//! [Compile-time and runtime pattern
Expand All @@ -23,7 +23,10 @@
//! - Macro [`runtime_pattern!`]: Builds a pattern at runtime.
//!
//! ```
//! use spdlog::formatter::{pattern, PatternFormatter};
//! use spdlog::{
//! formatter::{pattern, PatternFormatter},
//! prelude::*,
//! };
//! # use spdlog::sink::{Sink, WriteSink};
//!
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
Expand All @@ -45,7 +48,7 @@
//! # Ok(()) }
//! ```
//!
//! [`Sink::set_formatter`]: crate::sink::Sink::set_formatter
//! [`SinkAccess::set_formatter`]: crate::sink::SinkAccess::set_formatter
//! [./examples]: https://github.com/SpriteOvO/spdlog-rs/tree/main/spdlog/examples

mod full_formatter;
Expand All @@ -57,6 +60,7 @@ mod journald_formatter;
#[cfg(feature = "serde_json")]
mod json_formatter;
mod local_time_cacher;
mod null_formatter;
mod pattern_formatter;

use std::ops::Range;
Expand All @@ -71,6 +75,7 @@ pub(crate) use journald_formatter::*;
#[cfg(feature = "serde_json")]
pub use json_formatter::*;
pub(crate) use local_time_cacher::*;
pub(crate) use null_formatter::*;
pub use pattern_formatter::*;

use crate::{Record, Result, StringBuf};
Expand Down
26 changes: 26 additions & 0 deletions spdlog/src/formatter/null_formatter.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
use std::marker::PhantomData;

use crate::{
formatter::{Formatter, FormatterContext},
Record, StringBuf,
};

#[derive(Clone)]
pub(crate) struct UnreachableFormatter(PhantomData<()>);

impl UnreachableFormatter {
pub(crate) fn new() -> Self {
Self(PhantomData)
}
}

impl Formatter for UnreachableFormatter {
fn format(
&self,
_record: &Record,
_dest: &mut StringBuf,
_ctx: &mut FormatterContext,
) -> crate::Result<()> {
unreachable!()
}
}
25 changes: 5 additions & 20 deletions spdlog/src/formatter/pattern_formatter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,7 @@ use crate::{
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
///
/// let formatter = PatternFormatter::new(pattern!("[{level}] {payload}{eol}"));
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand All @@ -98,10 +95,7 @@ use crate::{
/// # };
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
/// let formatter = PatternFormatter::new(pattern!("[{{escaped}}] {payload}{eol}"));
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand All @@ -127,10 +121,7 @@ use crate::{
/// # };
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
/// let formatter = PatternFormatter::new(pattern!("{^[{level}]} {payload}{eol}"));
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand Down Expand Up @@ -169,10 +160,7 @@ use crate::{
/// {$mypat} => MyPattern::default,
/// );
/// let formatter = PatternFormatter::new(pat);
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand Down Expand Up @@ -233,10 +221,7 @@ use crate::{
/// {$mypat} => MyPattern::new,
/// );
/// let formatter = PatternFormatter::new(pat);
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand Down
10 changes: 2 additions & 8 deletions spdlog/src/formatter/pattern_formatter/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,7 @@ pub use spdlog_macros::runtime_pattern;
#[doc = include_str!(concat!(env!("OUT_DIR"), "/test_utils/common_for_doc_test.rs"))]
/// # fn main() -> Result<(), Box<dyn std::error::Error>> {
/// let formatter = PatternFormatter::new(runtime_pattern!("[{level}] {payload}{eol}")?);
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand Down Expand Up @@ -114,10 +111,7 @@ pub use spdlog_macros::runtime_pattern;
/// {$mypat2} => pat
/// )?
/// );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(
/// # Box::new(formatter),
/// # None
/// # );
/// # let (doctest, sink) = test_utils::echo_logger_from_formatter(formatter, None);
///
/// info!(logger: doctest, "Interesting log message");
/// # assert_eq!(
Expand Down
3 changes: 3 additions & 0 deletions spdlog/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,9 @@ pub use thread_pool::*;

/// Contains all log macros and common types.
pub mod prelude {
// Traits
pub use super::sink::SinkAccess as _;
// Types
pub use super::{
critical, debug, error, info, log, trace, warn, Level, LevelFilter, Logger, LoggerBuilder,
};
Expand Down
Loading
Loading