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:
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user