Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
borntyping committed Mar 18, 2023
2 parents 36ad1ac + c32992b commit 168c403
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

A logger that prints all messages with a readable output format.

The output format is based on the format used by [Supervisord](https://github.com/Supervisor/supervisor), with timestamps in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format.
The output format is based on the format used by [Supervisord](https://github.com/Supervisor/supervisor), with timestamps in default [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format and custom format.

* [Source on GitHub](https://github.com/borntyping/rust-simple_logger)
* [Packages on Crates.io](https://crates.io/crates/simple_logger)
Expand Down
12 changes: 12 additions & 0 deletions examples/timestamps_format.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
use simple_logger::SimpleLogger;
use time::macros::format_description;

fn main() {
SimpleLogger::new()
.env()
.with_custom_timestamps(format_description!("[year]-[month]-[day] [hour]:[minute]:[second]"))
.init()
.unwrap();

log::warn!("This is an example message with custom timestamp format.");
}
41 changes: 38 additions & 3 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ pub struct SimpleLogger {
/// This field is only available if the `timestamps` feature is enabled.
#[cfg(feature = "timestamps")]
timestamps: Timestamps,
#[cfg(feature = "timestamps")]
timeformat: &'static [FormatItem<'static>],

/// Whether to use color output or not.
///
Expand Down Expand Up @@ -111,6 +113,8 @@ impl SimpleLogger {

#[cfg(feature = "timestamps")]
timestamps: Timestamps::Utc,
#[cfg(feature = "timestamps")]
timeformat: time::macros::format_description!(""),

#[cfg(feature = "colored")]
colors: true,
Expand Down Expand Up @@ -265,6 +269,26 @@ impl SimpleLogger {
self
}

/// Custom timestamps format
///
/// The syntax for the format_description macro can be found in the
/// [`time` crate book](https://time-rs.github.io/book/api/format-description.html).
///
/// ```
/// simple_logger::SimpleLogger::new()
/// .with_level(log::LevelFilter::Debug)
/// .env()
/// .with_custom_timestamps(time::macros::format_description!("[year]-[month]-[day] [hour]:[minute]:[second]"))
/// .init()
/// .unwrap();
/// ```
#[must_use = "You must call init() to begin logging"]
#[cfg(feature = "timestamps")]
pub fn with_custom_timestamps(mut self, timeformat: &'static [FormatItem<'static>]) -> SimpleLogger {
self.timeformat = timeformat;
self
}

/// Don't display any timestamps.
///
/// This method is only available if the `timestamps` feature is enabled.
Expand Down Expand Up @@ -321,6 +345,17 @@ impl SimpleLogger {
#[cfg(all(windows, feature = "colored"))]
set_up_color_terminal();

// Set default timestamp format
#[cfg(feature = "timestamps")]
if self.timeformat.len() <= 0 {
self.timeformat = match self.timestamps {
Timestamps::Local => TIMESTAMP_FORMAT_OFFSET,
Timestamps::Utc => TIMESTAMP_FORMAT_UTC,
Timestamps::UtcOffset(_) => TIMESTAMP_FORMAT_OFFSET,
_ => self.timeformat,
};
}

/* Sort all module levels from most specific to least specific. The length of the module
* name is used instead of its actual depth to avoid module name parsing.
*/
Expand Down Expand Up @@ -426,15 +461,15 @@ impl Log for SimpleLogger {
"behaviour. See the time crate's documentation for more information. ",
"(https://time-rs.github.io/internal-api/time/index.html#feature-flags)"
))
.format(&TIMESTAMP_FORMAT_OFFSET)
.format(&self.timeformat)
.unwrap()
),
Timestamps::Utc => format!("{} ", OffsetDateTime::now_utc().format(&TIMESTAMP_FORMAT_UTC).unwrap()),
Timestamps::Utc => format!("{} ", OffsetDateTime::now_utc().format(&self.timeformat).unwrap()),
Timestamps::UtcOffset(offset) => format!(
"{} ",
OffsetDateTime::now_utc()
.to_offset(offset)
.format(&TIMESTAMP_FORMAT_OFFSET)
.format(&self.timeformat)
.unwrap()
),
}
Expand Down

0 comments on commit 168c403

Please sign in to comment.