summaryrefslogtreecommitdiff
path: root/src/mongo/logger
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@10gen.com>2013-07-24 13:58:06 -0400
committerAndy Schwerin <schwerin@10gen.com>2013-07-26 10:29:19 -0400
commit01b4f0ad09c244fd7f83bb045ff844416aa8ca96 (patch)
treec28eab03fdcc19869292d98178e89ba6692fcd1d /src/mongo/logger
parent6e28cfc2c03a85b70e84e0a4998d8ef86aa06a54 (diff)
downloadmongo-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.cpp12
-rw-r--r--src/mongo/logger/message_event_utf8_encoder.h20
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);
};