Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

subscriber: don't bail when timestamp formatting fails #1689

Merged
merged 1 commit into from
Oct 26, 2021

Conversation

hawkw
Copy link
Member

@hawkw hawkw commented Oct 26, 2021

Motivation

Currently, tracing_subscriber::fmt will bail out of formatting the log
line when formatting the timestamp fails. Previously, when timestamps
were formatted using the chrono crate, this was the correct behavior,
as getting the timestamp was infallible, and an error would only be
returned if formatting the timestamp to the buffer fails. This should
never actually happen, because we are writing the timestamp to a string,
which should never fail; using ? is just a bit more efficient than
.expect because it doesn't require generating unwinding code.

However, this is no longer the case when using the time crate. In the
time API, actually getting a timestamp is fallible, and in some cases,
will fail. The current code will bail out of formatting the entire log
line if getting the timestamp fails, which is not great --- using the
wrong timestamp formatter will result in silently dropping all log
lines.

Solution

This branch changes the format_timestamp method to print <unknown time> when the timestamp formatting fails, rather than bailing. This
way, we at least print the rest of the log line for the event.

This fixes half of the issue described in #1688 (the other half is
improving documentation).

## Motivation

Currently, `tracing_subscriber::fmt` will bail out of formatting the log
line when formatting the timestamp fails. Previously, when timestamps
were formatted using the `chrono` crate, this was the correct behavior,
as getting the timestamp was infallible, and an error would only be
returned if *formatting* the timestamp to the buffer fails. This should
never actually happen, because we are writing the timestamp to a string,
which should never fail; using `?` is just a bit more efficient than
`.expect` because it doesn't require generating unwinding code.

However, this is no longer the case when using the `time` crate. In the
`time` API, actually getting a timestamp is fallible, and in some cases,
will fail. The current code will bail out of formatting the entire log
line if getting the timestamp fails, which is not great --- using the
wrong timestamp formatter will result in silently dropping all log
lines.

## Solution

This branch changes the `format_timestamp` method to print `<unknown
time>` when the timestamp formatting fails, rather than bailing. This
way, we at least print the rest of the log line for the event.

This fixes half of the issue described in #1688 (the other half is
improving documentation).
@hawkw hawkw requested a review from davidbarsky October 26, 2021 16:26
@hawkw hawkw self-assigned this Oct 26, 2021
@hawkw hawkw requested a review from a team as a code owner October 26, 2021 16:26
@hawkw hawkw merged commit 05686f2 into master Oct 26, 2021
@hawkw hawkw deleted the eliza/no-bail-on-timer-fails branch October 26, 2021 17:01
hawkw added a commit that referenced this pull request Nov 30, 2021
## Motivation

Currently, `tracing_subscriber::fmt` will bail out of formatting the log
line when formatting the timestamp fails. Previously, when timestamps
were formatted using the `chrono` crate, this was the correct behavior,
as getting the timestamp was infallible, and an error would only be
returned if *formatting* the timestamp to the buffer fails. This should
never actually happen, because we are writing the timestamp to a string,
which should never fail; using `?` is just a bit more efficient than
`.expect` because it doesn't require generating unwinding code.

However, this is no longer the case when using the `time` crate. In the
`time` API, actually getting a timestamp is fallible, and in some cases,
will fail. The current code will bail out of formatting the entire log
line if getting the timestamp fails, which is not great --- using the
wrong timestamp formatter will result in silently dropping all log
lines.

## Solution

This branch changes the `format_timestamp` method to print `<unknown
time>` when the timestamp formatting fails, rather than bailing. This
way, we at least print the rest of the log line for the event.

This fixes half of the issue described in #1688 (the other half is
improving documentation).
hawkw added a commit that referenced this pull request Dec 1, 2021
## Motivation

Currently, `tracing_subscriber::fmt` will bail out of formatting the log
line when formatting the timestamp fails. Previously, when timestamps
were formatted using the `chrono` crate, this was the correct behavior,
as getting the timestamp was infallible, and an error would only be
returned if *formatting* the timestamp to the buffer fails. This should
never actually happen, because we are writing the timestamp to a string,
which should never fail; using `?` is just a bit more efficient than
`.expect` because it doesn't require generating unwinding code.

However, this is no longer the case when using the `time` crate. In the
`time` API, actually getting a timestamp is fallible, and in some cases,
will fail. The current code will bail out of formatting the entire log
line if getting the timestamp fails, which is not great --- using the
wrong timestamp formatter will result in silently dropping all log
lines.

## Solution

This branch changes the `format_timestamp` method to print `<unknown
time>` when the timestamp formatting fails, rather than bailing. This
way, we at least print the rest of the log line for the event.

This fixes half of the issue described in #1688 (the other half is
improving documentation).
hawkw added a commit that referenced this pull request Dec 23, 2021
# 0.3.4 (Dec 23, 2021)

This release contains bugfixes for the `fmt` module, as well as documentation
improvements.

### Fixed

- **fmt**: Fixed `fmt` not emitting log lines when timestamp formatting fails
  ([#1689])
- **fmt**: Fixed double space before thread IDs with `Pretty` formatter
  ([#1778])
- Several documentation improvements ([#1608], [#1699], [#1701])

[#1689]: #1689
[#1778]: #1778
[#1608]: #1608
[#1699]: #1699
[#1701]: #1701

Thanks to new contributors @Swatinem and @rukai for contributing to this
release!
hawkw added a commit that referenced this pull request Dec 23, 2021
# 0.3.4 (Dec 23, 2021)

This release contains bugfixes for the `fmt` module, as well as documentation
improvements.

### Fixed

- **fmt**: Fixed `fmt` not emitting log lines when timestamp formatting fails
  ([#1689])
- **fmt**: Fixed double space before thread IDs with `Pretty` formatter
  ([#1778])
- Several documentation improvements ([#1608], [#1699], [#1701])

[#1689]: #1689
[#1778]: #1778
[#1608]: #1608
[#1699]: #1699
[#1701]: #1701

Thanks to new contributors @Swatinem and @rukai for contributing to this
release!
kaffarell pushed a commit to kaffarell/tracing that referenced this pull request May 22, 2024
# 0.3.4 (Dec 23, 2021)

This release contains bugfixes for the `fmt` module, as well as documentation
improvements.

### Fixed

- **fmt**: Fixed `fmt` not emitting log lines when timestamp formatting fails
  ([tokio-rs#1689])
- **fmt**: Fixed double space before thread IDs with `Pretty` formatter
  ([tokio-rs#1778])
- Several documentation improvements ([tokio-rs#1608], [tokio-rs#1699], [tokio-rs#1701])

[tokio-rs#1689]: tokio-rs#1689
[tokio-rs#1778]: tokio-rs#1778
[tokio-rs#1608]: tokio-rs#1608
[tokio-rs#1699]: tokio-rs#1699
[tokio-rs#1701]: tokio-rs#1701

Thanks to new contributors @Swatinem and @rukai for contributing to this
release!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants