| Index: base/syslog_logging.cc
|
| diff --git a/base/syslog_logging.cc b/base/syslog_logging.cc
|
| index 1cd545910a967a6f52f5a138136bceb8be6782fd..17b750ded14bcd5de0894aac9d83d8b579f4c416 100644
|
| --- a/base/syslog_logging.cc
|
| +++ b/base/syslog_logging.cc
|
| @@ -6,6 +6,8 @@
|
| #include "base/syslog_logging.h"
|
|
|
| #if defined(OS_WIN)
|
| +#include "base/bind.h"
|
| +#include "base/callback_helpers.h"
|
| #include "base/win/eventlog_messages.h"
|
|
|
| #include <windows.h>
|
| @@ -19,6 +21,18 @@
|
|
|
| namespace logging {
|
|
|
| +#if defined(OS_WIN)
|
| +
|
| +namespace {
|
| +std::string* g_event_source_name = nullptr;
|
| +}
|
| +
|
| +void SetEventSourceName(const std::string& name) {
|
| + DCHECK_EQ(nullptr, g_event_source_name);
|
| + g_event_source_name = new std::string(name);
|
| +}
|
| +#endif // defined(OS_WIN)
|
| +
|
| EventLogMessage::EventLogMessage(const char* file,
|
| int line,
|
| LogSeverity severity)
|
| @@ -27,13 +41,23 @@ EventLogMessage::EventLogMessage(const char* file,
|
|
|
| EventLogMessage::~EventLogMessage() {
|
| #if defined(OS_WIN)
|
| - const char kEventSource[] = "chrome";
|
| - HANDLE event_log_handle = RegisterEventSourceA(NULL, kEventSource);
|
| + // If g_event_source_name is nullptr (which it is per default) SYSLOG will
|
| + // degrade gracefully to regular LOG with an extra error suffix. If you see
|
| + // this happening most probably you are using SYSLOG before you called
|
| + // SetEventSourceName.
|
| + if (g_event_source_name == nullptr) {
|
| + stream() << " !!EVENTLOG SOURCE NAME NOT SET!!";
|
| + return;
|
| + }
|
| + HANDLE event_log_handle =
|
| + RegisterEventSourceA(NULL, g_event_source_name->c_str());
|
| if (event_log_handle == NULL) {
|
| stream() << " !!NOT ADDED TO EVENTLOG!!";
|
| return;
|
| }
|
|
|
| + base::ScopedClosureRunner auto_deregister(
|
| + base::Bind(base::IgnoreResult(&DeregisterEventSource), event_log_handle));
|
| std::string message(log_message_.str());
|
| WORD log_type = EVENTLOG_ERROR_TYPE;
|
| switch (log_message_.severity()) {
|
| @@ -57,7 +81,6 @@ EventLogMessage::~EventLogMessage() {
|
| MSG_LOG_MESSAGE, NULL, 1, 0, strings, NULL)) {
|
| stream() << " !!NOT ADDED TO EVENTLOG!!";
|
| }
|
| - DeregisterEventSource(event_log_handle);
|
| #elif defined(OS_LINUX)
|
| const char kEventSource[] = "chrome";
|
| openlog(kEventSource, LOG_NOWAIT | LOG_PID, LOG_USER);
|
|
|