Skip to content
Open
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
10 changes: 10 additions & 0 deletions tracing-subscriber/src/fmt/fmt_layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,16 @@ where
}
}

/// Sets whether or not an event's [name] is displayed.
///
/// [name]: tracing_core::Metadata::name
pub fn with_event_name(self, display_event_name: bool) -> Layer<S, N, format::Format<L, T>, W> {
Layer {
fmt_event: self.fmt_event.with_event_name(display_event_name),
..self
}
}

/// Sets whether or not an event's level is displayed.
pub fn with_level(self, display_level: bool) -> Layer<S, N, format::Format<L, T>, W> {
Layer {
Expand Down
151 changes: 146 additions & 5 deletions tracing-subscriber/src/fmt/format/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,7 @@ pub struct Format<F = Full, T = SystemTime> {
pub(crate) display_thread_name: bool,
pub(crate) display_filename: bool,
pub(crate) display_line_number: bool,
pub(crate) display_event_name: bool,
}

// === impl Writer ===
Expand Down Expand Up @@ -599,6 +600,7 @@ impl Default for Format<Full, SystemTime> {
display_thread_name: false,
display_filename: false,
display_line_number: false,
display_event_name: false,
}
}
}
Expand All @@ -619,6 +621,7 @@ impl<F, T> Format<F, T> {
display_thread_name: self.display_thread_name,
display_filename: self.display_filename,
display_line_number: self.display_line_number,
display_event_name: self.display_event_name,
}
}

Expand Down Expand Up @@ -658,6 +661,7 @@ impl<F, T> Format<F, T> {
display_thread_name: self.display_thread_name,
display_filename: true,
display_line_number: true,
display_event_name: false,
}
}

Expand Down Expand Up @@ -689,6 +693,7 @@ impl<F, T> Format<F, T> {
display_thread_name: self.display_thread_name,
display_filename: self.display_filename,
display_line_number: self.display_line_number,
display_event_name: self.display_event_name,
}
}

Expand Down Expand Up @@ -718,6 +723,7 @@ impl<F, T> Format<F, T> {
display_thread_name: self.display_thread_name,
display_filename: self.display_filename,
display_line_number: self.display_line_number,
display_event_name: self.display_event_name,
}
}

Expand All @@ -734,6 +740,7 @@ impl<F, T> Format<F, T> {
display_thread_name: self.display_thread_name,
display_filename: self.display_filename,
display_line_number: self.display_line_number,
display_event_name: self.display_thread_name,
}
}

Expand Down Expand Up @@ -794,6 +801,35 @@ impl<F, T> Format<F, T> {
}
}

/// Sets whether or not an event's [name] is
/// displayed.
/// This enables the inclusion of the event's name in the formatted output.
/// By default, event names are not displayed.
///
/// # Example
///
/// ```rust
/// use tracing_subscriber::fmt;
/// use tracing::{Level, event};
///
/// let format = fmt::format()
/// .with_event_name(true);
///
/// let subscriber = fmt()
/// .event_format(format)
/// .finish();
///
///event!(name: "my_event_name", Level::INFO, "hello");
/// ```
///
/// [name]: tracing_core::Metadata::name
pub fn with_event_name(self, display_event_name: bool) -> Format<F, T> {
Format {
display_event_name,
..self
}
}

/// Sets whether or not an event's [source code line number][line] is
/// displayed.
///
Expand Down Expand Up @@ -1008,6 +1044,24 @@ where
}
}

if self.display_event_name {
let name = meta.name();

let should_display = match (meta.file(), meta.line()) {
(Some(file), Some(line)) => name != format!("event {}:{}", file, line),
_ => true,
};

if should_display {
write!(
writer,
"{}{} ",
dimmed.paint(meta.name()),
dimmed.paint(":")
)?;
}
}

if let Some(line_number) = line_number {
write!(
writer,
Expand Down Expand Up @@ -1119,6 +1173,23 @@ where
}
}

if self.display_event_name {
let name = meta.name();

let should_display = match (meta.file(), meta.line()) {
(Some(file), Some(line)) => name != format!("event {}:{}", file, line),
_ => true,
};

if should_display {
if needs_space {
writer.write_char(' ')?;
}
write!(writer, "{}{}", dimmed.paint(name), dimmed.paint(":"))?;
needs_space = true;
}
}

if self.display_line_number {
if let Some(line_number) = meta.line() {
write!(
Expand Down Expand Up @@ -1743,11 +1814,7 @@ impl Display for TimingDisplay {
#[cfg(test)]
pub(super) mod test {
use crate::fmt::{test::MockMakeWriter, time::FormatTime};
use tracing::{
self,
dispatcher::{set_default, Dispatch},
subscriber::with_default,
};
use tracing::{self, dispatcher::{set_default, Dispatch}, event, subscriber::with_default};

use super::*;

Expand Down Expand Up @@ -1882,6 +1949,80 @@ pub(super) mod test {
assert_info_hello(subscriber, make_writer, expected);
}

#[test]
fn with_event_name() {
let make_writer = MockMakeWriter::default();
let subscriber = crate::fmt::Subscriber::builder()
.with_writer(make_writer.clone())
.with_event_name(true)
.with_level(false)
.with_ansi(false)
.with_timer(MockTime);

let _default = set_default(&subscriber.into());
event!(name: "custom_event", Level::INFO, "hello");

let expected
= "fake time tracing_subscriber::fmt::format::test: custom_event: hello\n";

assert_eq!(expected, make_writer.get_string());
}

#[test]
fn with_event_name_compact() {
let make_writer = MockMakeWriter::default();
let subscriber = crate::fmt::Subscriber::builder()
.with_writer(make_writer.clone())
.with_event_name(true)
.with_level(false)
.with_ansi(false)
.with_timer(MockTime)
.compact();

let _default = set_default(&subscriber.into());
event!(name: "compact_event", Level::INFO, "hello");

let result = make_writer.get_string();
assert!(result.contains("compact_event:"));
}

#[test]
fn with_event_name_hides_default() {
let make_writer = MockMakeWriter::default();
let subscriber = crate::fmt::Subscriber::builder()
.with_writer(make_writer.clone())
.with_event_name(true)
.with_level(false)
.with_ansi(false)
.with_timer(MockTime);

let _default = set_default(&subscriber.into());
tracing::info!("hello");

let result = make_writer.get_string();
assert!(!result.contains("event "));
assert_eq!("fake time tracing_subscriber::fmt::format::test: hello\n", result);
}

#[test]
fn without_event_name() {
let make_writer = MockMakeWriter::default();
let subscriber = crate::fmt::Subscriber::builder()
.with_writer(make_writer.clone())
.with_event_name(false)
.with_level(false)
.with_ansi(false)
.with_timer(MockTime);

let _default = set_default(&subscriber.into());
event!(name: "custom_event", Level::INFO, "hello");

let result = make_writer.get_string();
// adding this test to double check I didnt miss anything
assert!(!result.contains("custom_event:"));
assert_eq!("fake time tracing_subscriber::fmt::format::test: hello\n", result);
}

#[test]
fn with_thread_ids() {
let make_writer = MockMakeWriter::default();
Expand Down
14 changes: 14 additions & 0 deletions tracing-subscriber/src/fmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,20 @@ where
}
}

/// Sets whether or not an event's [name] is
/// displayed.
///
/// [name]: tracing_core::Metadata::name
pub fn with_event_name(
self,
display_event_name: bool,
) -> SubscriberBuilder<N, format::Format<L, T>, F, W> {
SubscriberBuilder {
inner: self.inner.with_event_name(display_event_name),
..self
}
}

/// Sets whether or not an event's level is displayed.
pub fn with_level(
self,
Expand Down