v0.29.6
This commit is contained in:
1 parent
3e33982cd3
commit
ad95bfb050
27 files changed
+309
-80
No files matched your search
+18
-2
@@ -328,6 +328,7 @@ pub struct ErrorLogStats {
|
||||
#[derive(Debug)]
|
||||
struct ErrorEvent {
|
||||
timestamp: String,
|
||||
level: String,
|
||||
target: String,
|
||||
message: String,
|
||||
fields: BTreeMap<String, String>,
|
||||
@@ -369,9 +370,23 @@ impl ErrorLogController {
|
||||
self.settings.store(Arc::new(settings));
|
||||
self.settings_changed.send_replace(());
|
||||
}
|
||||
/// All diagnostics go to stderr when file logging is disabled. With a file
|
||||
/// configured, warnings/errors go only to that file (unless the sink fails).
|
||||
/// Informational startup messages remain on the console.
|
||||
pub fn console_enabled_for(&self, level: &Level) -> bool {
|
||||
!matches!(*level, Level::WARN | Level::ERROR) || !self.settings.load().enabled
|
||||
}
|
||||
fn push(&self, event: ErrorEvent) {
|
||||
if self.settings.load().enabled && self.sender.try_send(event).is_err() {
|
||||
let config = self.settings.load();
|
||||
if !config.enabled {
|
||||
return;
|
||||
}
|
||||
if let Err(error) = self.sender.try_send(event) {
|
||||
self.dropped.fetch_add(1, Ordering::Relaxed);
|
||||
// An overloaded/closed sink must not silently swallow a diagnostic
|
||||
// suppressed by the console filter. This emergency path is bounded
|
||||
// to one event and only runs on a failed non-blocking enqueue.
|
||||
write_error_fallback(&error.into_inner(), config.format);
|
||||
}
|
||||
}
|
||||
pub fn stats(&self) -> ErrorLogStats {
|
||||
@@ -451,7 +466,7 @@ impl tracing::field::Visit for EventVisitor {
|
||||
}
|
||||
impl<S: Subscriber> Layer<S> for ErrorLogLayer {
|
||||
fn on_event(&self, event: &Event<'_>, _ctx: LayerContext<'_, S>) {
|
||||
if *event.metadata().level() != Level::ERROR {
|
||||
if !matches!(*event.metadata().level(), Level::ERROR | Level::WARN) {
|
||||
return;
|
||||
}
|
||||
let mut visitor = EventVisitor::default();
|
||||
@@ -466,6 +481,7 @@ impl<S: Subscriber> Layer<S> for ErrorLogLayer {
|
||||
}
|
||||
self.controller.push(ErrorEvent {
|
||||
timestamp: rfc3339_now(),
|
||||
level: event.metadata().level().as_str().to_owned(),
|
||||
target: event.metadata().target().to_owned(),
|
||||
message: redact_text(visitor.message.as_deref().unwrap_or("error")),
|
||||
fields,
|
||||
|
||||
Reference in new issue
Block a user