Make SystemMessageHandler store FileMessage()s to buffer as well.

* Make AddMessageToBuffer() non-virtual, as nobody ever overrides it.
* Add version of AddMessageToBuffer() which accepts file:line arguments and adds them to the log line stored.
* Use the latter in ApacheMessageHandler.
Nginx side of this change: https://github.com/pagespeed/ngx_pagespeed/pull/1255 .
Related to 3e31b0c5d6.
This commit is contained in:
Egor Suvorov
2016-08-25 14:22:50 -04:00
parent b029922629
commit ac859adc4e
4 changed files with 41 additions and 7 deletions
@@ -123,6 +123,7 @@ void ApacheMessageHandler::FileMessageSImpl(
"[%s %s @%ld] %s:%d: %s",
kModuleName, version_.c_str(), static_cast<long>(getpid()),
file, line, message.c_str());
AddMessageToBuffer(type, file, line, message);
}
} // namespace net_instaweb
+13 -3
View File
@@ -44,8 +44,14 @@ void SystemMessageHandler::set_buffer(Writer* buff) {
buffer_ = buff;
}
void SystemMessageHandler::AddMessageToBuffer(
MessageType type, StringPiece formatted_message) {
void SystemMessageHandler::AddMessageToBuffer(MessageType type,
StringPiece formatted_message) {
AddMessageToBuffer(type, nullptr, 0, formatted_message);
}
void SystemMessageHandler::AddMessageToBuffer(MessageType type,
const char* file, int line,
StringPiece formatted_message) {
if (formatted_message.empty()) {
return;
}
@@ -59,7 +65,11 @@ void SystemMessageHandler::AddMessageToBuffer(
StringPieceVector lines;
SplitStringPieceToVector(formatted_message, "\n", &lines, false);
StrAppend(&message, type_char, "[", time, "] [", type_str, "] ");
StrAppend(&message, pid_string_, " ", lines[0], "\n");
StrAppend(&message, pid_string_, " ");
if (file) {
StrAppend(&message, "[", file, ":", IntegerToString(line), "] ");
}
StrAppend(&message, lines[0], "\n");
for (int i = 1, n = lines.size(); i < n; ++i) {
StrAppend(&message, type_char, lines[i], "\n");
}
+5 -4
View File
@@ -56,10 +56,11 @@ class SystemMessageHandler : public GoogleMessageHandler {
virtual bool Dump(Writer* writer);
protected:
// Add messages to the SharedCircularBuffer. This is left virtual so that
// different servers can choose how to format the message window.
virtual void AddMessageToBuffer(MessageType type,
StringPiece formatted_message);
// Add messages to the SharedCircularBuffer.
void AddMessageToBuffer(MessageType type, StringPiece formatted_message);
void AddMessageToBuffer(MessageType type, const char* file, int line,
StringPiece formatted_message);
// Since we subclass GoogleMessageHandler but want to format messages
// internally we must provide overrides of these two logging methods.
virtual void MessageVImpl(MessageType type, const char* msg, va_list args);
@@ -44,6 +44,11 @@ class SystemMessageHandlerTest : public testing::Test {
system_message_handler_.AddMessageToBuffer(type, msg);
}
void AddMessage(MessageType type, const char* file, int line,
StringPiece msg) {
system_message_handler_.AddMessageToBuffer(type, file, line, msg);
}
scoped_ptr<ThreadSystem> thread_system_;
MockTimer timer_;
SystemMessageHandler system_message_handler_;
@@ -80,4 +85,21 @@ TEST_F(SystemMessageHandlerTest, WrapLongLinesWarning) {
buffer_);
}
TEST_F(SystemMessageHandlerTest, AddsFileLineInfo) {
AddMessage(kInfo, "test_file.cc", 4321, "Test message");
EXPECT_STREQ(
"I[Mon, 05 Apr 2010 18:51:26 GMT] [Info] [1234] "
"[test_file.cc:4321] Test message\n",
buffer_);
}
TEST_F(SystemMessageHandlerTest, AddsFileLineInfoWrapLongLines) {
AddMessage(kInfo, "test_file.cc", 4321, "Test message with\nnew line.");
EXPECT_STREQ(
"I[Mon, 05 Apr 2010 18:51:26 GMT] [Info] [1234] "
"[test_file.cc:4321] Test message with\n"
"Inew line.\n",
buffer_);
}
} // namespace net_instaweb