7 template <
class Formatter>
11 EventLogAppender(
const wchar_t* sourceName) : m_eventSource(RegisterEventSourceW(NULL, sourceName))
17 DeregisterEventSource(m_eventSource);
22 std::wstring str = Formatter::format(record);
23 const wchar_t* logMessagePtr[] = { str.c_str() };
25 ReportEventW(m_eventSource, logSeverityToType(record.
getSeverity()), static_cast<WORD>(record.
getSeverity()), 0, NULL, 1, 0, logMessagePtr, NULL);
35 return eventLog::kErrorType;
38 return eventLog::kWarningType;
44 return eventLog::kInformationType;
55 static bool add(
const wchar_t* sourceName,
const wchar_t* logName = L
"Application")
57 std::wstring logKeyName;
58 std::wstring sourceKeyName;
59 getKeyNames(sourceName, logName, sourceKeyName, logKeyName);
62 if (0 != RegCreateKeyExW(hkey::kLocalMachine, sourceKeyName.c_str(), 0, NULL, 0, regSam::kSetValue, NULL, &sourceKey, NULL))
67 const DWORD kTypesSupported = eventLog::kErrorType | eventLog::kWarningType | eventLog::kInformationType;
68 RegSetValueExW(sourceKey, L
"TypesSupported", 0, regType::kDword, &kTypesSupported,
sizeof(kTypesSupported));
70 const wchar_t kEventMessageFile[] = L
"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\EventLogMessages.dll;%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\EventLogMessages.dll";
71 RegSetValueExW(sourceKey, L
"EventMessageFile", 0, regType::kExpandSz, kEventMessageFile, static_cast<DWORD>(::wcslen(kEventMessageFile) *
sizeof(
wchar_t)));
73 RegCloseKey(sourceKey);
77 static bool exists(
const wchar_t* sourceName,
const wchar_t* logName = L
"Application")
79 std::wstring logKeyName;
80 std::wstring sourceKeyName;
81 getKeyNames(sourceName, logName, sourceKeyName, logKeyName);
84 if (0 != RegOpenKeyExW(hkey::kLocalMachine, sourceKeyName.c_str(), 0, regSam::kQueryValue, &sourceKey))
89 RegCloseKey(sourceKey);
93 static void remove(
const wchar_t* sourceName,
const wchar_t* logName = L
"Application")
95 std::wstring logKeyName;
96 std::wstring sourceKeyName;
97 getKeyNames(sourceName, logName, sourceKeyName, logKeyName);
99 RegDeleteKeyW(hkey::kLocalMachine, sourceKeyName.c_str());
100 RegDeleteKeyW(hkey::kLocalMachine, logKeyName.c_str());
104 static void getKeyNames(
const wchar_t* sourceName,
const wchar_t* logName, std::wstring& sourceKeyName, std::wstring& logKeyName)
106 const std::wstring kPrefix = L
"SYSTEM\\CurrentControlSet\\Services\\EventLog\\";
107 logKeyName = kPrefix + logName;
108 sourceKeyName = logKeyName + L
"\\" + sourceName;
Definition: AndroidAppender.h:5
Definition: Severity.h:11
static bool add(const wchar_t *sourceName, const wchar_t *logName=L"Application")
Definition: EventLogAppender.h:55
Definition: Severity.h:13
static bool exists(const wchar_t *sourceName, const wchar_t *logName=L"Application")
Definition: EventLogAppender.h:77
virtual void write(const Record &record)
Definition: EventLogAppender.h:20
Definition: EventLogAppender.h:8
EventLogAppender(const wchar_t *sourceName)
Definition: EventLogAppender.h:11
Definition: Severity.h:12
virtual Severity getSeverity() const
Definition: Record.h:185
Definition: IAppender.h:6
Definition: Severity.h:10
Definition: EventLogAppender.h:52
~EventLogAppender()
Definition: EventLogAppender.h:15
Severity
Definition: Severity.h:5