diff options
author | Andy Schwerin <schwerin@10gen.com> | 2013-07-24 13:58:06 -0400 |
---|---|---|
committer | Andy Schwerin <schwerin@10gen.com> | 2013-07-26 10:29:19 -0400 |
commit | 01b4f0ad09c244fd7f83bb045ff844416aa8ca96 (patch) | |
tree | c28eab03fdcc19869292d98178e89ba6692fcd1d /src/mongo/logger | |
parent | 6e28cfc2c03a85b70e84e0a4998d8ef86aa06a54 (diff) | |
download | mongo-01b4f0ad09c244fd7f83bb045ff844416aa8ca96.tar.gz |
SERVER-7965 Make the timestamp format settable in servers.
From the command line or config file, --logTimestampFormat=(ctime|iso8601-utc|iso8601-local).
The beginning of the Unix Epoch is formatted as follows in the three formats,
assuming America/New_York for the time zone.
ctime: Wed Dec 31 19:00:00.000
iso8601-utc: 1970-01-01T00:00:00.000Z
iso8601-local: 1969-12-31T19:00:00.000+0500
The default remains the same as in prior versions, "ctime".
Diffstat (limited to 'src/mongo/logger')
-rw-r--r-- | src/mongo/logger/message_event_utf8_encoder.cpp | 12 | ||||
-rw-r--r-- | src/mongo/logger/message_event_utf8_encoder.h | 20 |
2 files changed, 31 insertions, 1 deletions
diff --git a/src/mongo/logger/message_event_utf8_encoder.cpp b/src/mongo/logger/message_event_utf8_encoder.cpp index cf6225b3ffc..e8f30cef9c1 100644 --- a/src/mongo/logger/message_event_utf8_encoder.cpp +++ b/src/mongo/logger/message_event_utf8_encoder.cpp @@ -24,13 +24,23 @@ namespace mongo { namespace logger { + static MessageEventDetailsEncoder::DateFormatter _dateFormatter = dateToCtimeString; + + void MessageEventDetailsEncoder::setDateFormatter(DateFormatter dateFormatter) { + _dateFormatter = dateFormatter; + } + + MessageEventDetailsEncoder::DateFormatter MessageEventDetailsEncoder::getDateFormatter() { + return _dateFormatter; + } + MessageEventDetailsEncoder::~MessageEventDetailsEncoder() {} std::ostream& MessageEventDetailsEncoder::encode(const MessageEventEphemeral& event, std::ostream &os) { static const size_t maxLogLine = 10 * 1024; - os << dateToCtimeString(event.getDate()) << ' '; + os << _dateFormatter(event.getDate()) << ' '; StringData contextName = event.getContextName(); if (!contextName.empty()) { os << '[' << contextName << "] "; diff --git a/src/mongo/logger/message_event_utf8_encoder.h b/src/mongo/logger/message_event_utf8_encoder.h index 948f39508bd..e6baca7d6ee 100644 --- a/src/mongo/logger/message_event_utf8_encoder.h +++ b/src/mongo/logger/message_event_utf8_encoder.h @@ -15,8 +15,11 @@ #pragma once +#include <string> + #include "mongo/logger/encoder.h" #include "mongo/logger/message_event.h" +#include "mongo/util/time_support.h" namespace mongo { namespace logger { @@ -26,6 +29,23 @@ namespace logger { */ class MessageEventDetailsEncoder : public Encoder<MessageEventEphemeral> { public: + typedef std::string (*DateFormatter)(Date_t); + + /** + * Sets the date formatter function for all instances of MessageEventDetailsEncoder. + * + * Only and always safe to call during single-threaded execution, as in during start-up + * intiailization. + */ + static void setDateFormatter(DateFormatter dateFormatter); + + /** + * Gets the date formatter function in use by instances of MessageEventDetailsEncoder. + * + * Always safe to call. + */ + static DateFormatter getDateFormatter(); + virtual ~MessageEventDetailsEncoder(); virtual std::ostream& encode(const MessageEventEphemeral& event, std::ostream& os); }; |