Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(867)

Unified Diff: chromeos/network/network_event_log.cc

Issue 14876021: Re-factor network_event_log (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/network/network_event_log.cc
diff --git a/chromeos/network/network_event_log.cc b/chromeos/network/network_event_log.cc
index 7cb9e84a94d637747bf6c6ae4a0e647cb86e43cc..5d9050c9bd412c91b51b8471ae14504d0b6217e6 100644
--- a/chromeos/network/network_event_log.cc
+++ b/chromeos/network/network_event_log.cc
@@ -9,6 +9,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/stringprintf.h"
#include "base/utf_string_conversions.h"
+#include "base/values.h"
namespace chromeos {
@@ -17,37 +18,61 @@ namespace network_event_log {
namespace {
struct LogEntry {
- LogEntry(const std::string& module,
+ LogEntry(const std::string& file,
+ int file_line,
+ int log_level,
gauravsh 2013/05/13 00:34:51 Why is this an int instead of a log-level? std::mi
stevenjb 2013/05/13 19:36:39 Done.
const std::string& event,
const std::string& description);
- std::string ToString() const;
+ std::string ToString(const std::string& format) const;
gauravsh 2013/05/13 00:34:51 Comment for the format of |format|?
stevenjb 2013/05/13 19:36:39 Changed to use bools
bool ContentEquals(const LogEntry& other) const;
- std::string module;
+ std::string file;
pneubeck (no reviews) 2013/05/13 13:16:25 base::Location
stevenjb 2013/05/13 19:36:39 Again, more complexity than I think we want, see S
pneubeck (no reviews) 2013/05/16 08:21:07 With base::Location, the filename would not have t
+ int file_line;
+ int log_level;
std::string event;
std::string description;
base::Time time;
int count;
};
-LogEntry::LogEntry(const std::string& module,
+LogEntry::LogEntry(const std::string& file,
+ int file_line,
+ int log_level,
const std::string& event,
const std::string& description)
- : module(module),
+ : file(file),
+ file_line(file_line),
+ log_level(log_level),
event(event),
description(description),
time(base::Time::Now()),
count(1) {
}
-std::string LogEntry::ToString() const {
+std::string LogEntry::ToString(const std::string& format) const {
std::string line;
- line += "[" + UTF16ToUTF8(base::TimeFormatShortDateAndTime(time)) + "]";
- line += " " + module + ":" + event;
- if (!description.empty())
+ if (format.find("time") != std::string::npos)
+ line += "[" + UTF16ToUTF8(base::TimeFormatShortDateAndTime(time)) + "] ";
+ if (format.find("file") != std::string::npos)
+ line += base::StringPrintf("%s:%d ", file.c_str(), file_line);
+ bool italic = (log_level == LOG_LEVEL_DEBUG &&
+ format.find("html") != std::string::npos);
+ bool bold = (log_level == LOG_LEVEL_ERROR &&
+ format.find("html") != std::string::npos);
+ if (italic)
+ line += "<i>";
+ if (bold)
+ line += "<b>";
+ line += event;
+ if ((format.find("desc") != std::string::npos) && !description.empty())
line += ": " + description;
+ if (bold)
+ line += "</b>";
+ if (italic)
+ line += "</i>";
+
if (count > 1)
line += base::StringPrintf(" (%d)", count);
line += "\n";
@@ -55,7 +80,8 @@ std::string LogEntry::ToString() const {
}
bool LogEntry::ContentEquals(const LogEntry& other) const {
- return module == other.module &&
+ return file == other.file &&
+ file_line == other.file_line &&
event == other.event &&
description == other.description;
}
@@ -67,9 +93,11 @@ class NetworkEventLog {
NetworkEventLog() {}
~NetworkEventLog() {}
- void AddEntry(const LogEntry& entry);
+ void AddLogEntry(const LogEntry& entry);
std::string GetAsString(StringOrder order,
+ const std::string& format,
+ int max_level,
gauravsh 2013/05/13 00:34:51 Why is this not a LogLevel?
stevenjb 2013/05/13 19:36:39 Done.
size_t max_events);
private:
@@ -78,12 +106,13 @@ class NetworkEventLog {
DISALLOW_COPY_AND_ASSIGN(NetworkEventLog);
};
-void NetworkEventLog::AddEntry(const LogEntry& entry) {
+void NetworkEventLog::AddLogEntry(const LogEntry& entry) {
if (!entries_.empty()) {
LogEntry& last = entries_.back();
if (last.ContentEquals(entry)) {
// Update count and time for identical events to avoid log spam.
++last.count;
+ last.log_level = std::min(last.log_level, entry.log_level);
last.time = base::Time::Now();
return;
}
@@ -91,10 +120,15 @@ void NetworkEventLog::AddEntry(const LogEntry& entry) {
if (entries_.size() >= kMaxNetworkEventLogEntries)
entries_.pop_front();
entries_.push_back(entry);
- VLOG(1) << entry.ToString();
+ if (entry.log_level == LOG_LEVEL_ERROR)
+ LOG(ERROR) << entry.ToString("time,file,desc");
+ else
+ VLOG(1) << entry.ToString("time,file,desc");
}
std::string NetworkEventLog::GetAsString(StringOrder order,
+ const std::string& format,
+ int max_level,
size_t max_events) {
if (entries_.empty())
return "No Log Entries.";
@@ -102,18 +136,32 @@ std::string NetworkEventLog::GetAsString(StringOrder order,
std::string result;
if (order == OLDEST_FIRST) {
size_t offset = 0;
- if (max_events > 0 && max_events < entries_.size())
+ if (max_events > 0 && max_events < entries_.size()) {
offset = entries_.size() - max_events;
+ // Iterate backwards through the list, decramenting the offset for entries
gauravsh 2013/05/13 00:34:51 decrementing
stevenjb 2013/05/13 19:36:39 Done.
+ // that will be skipped.
+ for (LogEntryList::const_reverse_iterator riter = entries_.rbegin();
+ riter != entries_.rend(); ++riter) {
+ if (riter->log_level > max_level) {
+ if (--offset == 0)
gauravsh 2013/05/13 00:34:51 BUG? Wouldn't this end up decrementing the offset
stevenjb 2013/05/13 19:36:39 You're right, I need to check the shown events aga
+ break;
+ }
+ }
+ }
for (LogEntryList::const_iterator iter = entries_.begin() + offset;
iter != entries_.end(); ++iter) {
- result += (*iter).ToString();
+ if (iter->log_level > max_level)
+ continue;
+ result += (*iter).ToString(format);
}
} else {
size_t nlines = 0;
// Iterate backwards through the list to show the most recent entries first.
for (LogEntryList::const_reverse_iterator riter = entries_.rbegin();
riter != entries_.rend(); ++riter) {
- result += (*riter).ToString();
+ if (riter->log_level > max_level)
+ continue;
+ result += (*riter).ToString(format);
if (max_events > 0 && ++nlines >= max_events)
break;
}
@@ -124,6 +172,7 @@ std::string NetworkEventLog::GetAsString(StringOrder order,
} // namespace
NetworkEventLog* g_network_event_log = NULL;
+const int kDefaultLogLevel = 1;
const size_t kMaxNetworkEventLogEntries = 1000;
void Initialize() {
@@ -141,21 +190,54 @@ bool IsInitialized() {
return g_network_event_log != NULL;
}
-void AddEntry(const std::string& module,
+void AddEntry(const char* file,
+ int file_line,
+ LogLevel log_level,
const std::string& event,
const std::string& description) {
- LogEntry entry(module, event, description);
+ std::string filestr;
pneubeck (no reviews) 2013/05/13 13:16:25 FilePath::BaseName()
stevenjb 2013/05/13 19:36:39 Done.
+ if (file) {
+ filestr = std::string(file);
+ size_t n = filestr.find_last_of('/');
+ if (n)
+ filestr = filestr.substr(n+1);
+ }
+ LogEntry entry(filestr, file_line, log_level, event, description);
if (!g_network_event_log) {
- VLOG(1) << entry.ToString();
+ VLOG(1) << entry.ToString("time,file,desc");
pneubeck (no reviews) 2013/05/13 13:16:25 this should respect the log level.
stevenjb 2013/05/13 19:36:39 Done.
return;
}
- g_network_event_log->AddEntry(entry);
+ g_network_event_log->AddLogEntry(entry);
}
-std::string GetAsString(StringOrder order, size_t max_events) {
+std::string GetAsString(StringOrder order,
+ const std::string& format,
+ int max_level,
+ size_t max_events) {
if (!g_network_event_log)
return "NetworkEventLog not intitialized.";
- return g_network_event_log->GetAsString(order, max_events);
+ return g_network_event_log->GetAsString(order, format, max_level, max_events);
+}
+
+std::string DBusValueAsString(const base::Value& value) {
+ if (value.GetType() == base::Value::TYPE_BOOLEAN) {
+ bool bval = false;
+ value.GetAsBoolean(&bval);
+ return bval ? "true" : "false";
+ } else if (value.GetType() == base::Value::TYPE_INTEGER) {
+ int intval = 0;
+ value.GetAsInteger(&intval);
+ return base::StringPrintf("%d", intval);
+ } else if (value.GetType() == base::Value::TYPE_DOUBLE) {
+ double dval = 0;
+ value.GetAsDouble(&dval);
+ return base::StringPrintf("%g", dval);
+ } else if (value.GetType() == base::Value::TYPE_STRING) {
+ std::string vstr;
+ value.GetAsString(&vstr);
+ return vstr;
+ }
+ return "";
}
} // namespace network_event_log

Powered by Google App Engine
This is Rietveld 408576698