TNB Library
TnbEventLogger.h
[詳解]
1#pragma once
11#include "TnbSingleton.h"
12#include "TnbStrEx.h"
13#include "TnbRegistryAccessor.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
58{
60 SINGLETON_CONSTRUCTOR(CEventLogger)
61 {
62 m_sourceName = GetProcessName();
63 }
64public:
65
72 void SetSourceName(LPCTSTR lpszSourceName)
73 {
74 m_sourceName = lpszSourceName;
75 }
76
82 LPCTSTR GetSourceName(void) const
83 {
84 return m_sourceName;
85 }
86
96 bool RegistEventSource(LPCTSTR lpszModuleName = NULL)
97 {
98 HMODULE h = NULL;
99 if ( lpszModuleName != NULL )
100 {
101 h = ::LoadLibrary(lpszModuleName);
102 }
103 CStr path;
104 DWORD dwRc = ::GetModuleFileName(h, path.GetBuffer(MAX_PATH), MAX_PATH);
105 path.ReleaseBuffer();
106 if ( dwRc > 0 )
107 {
108 CRegistryAccessor reg(HKEY_LOCAL_MACHINE, m_KeyName());
109 CRegistryAccessor::CSection sec = reg[m_sourceName];
110 sec.WriteString(_T("EventMessageFile"), path);
111 }
112 return (dwRc > 0);
113 }
114
121 {
122 if ( ! m_sourceName.IsEmpty() )
123 {
124 CRegistryAccessor reg(HKEY_LOCAL_MACHINE, m_KeyName());
125 reg.DeleteSection(m_sourceName);
126 }
127 }
128
137 bool Information(DWORD eventId, LPCTSTR lpszFmt, ...) const
138 {
139 va_list args;
140 va_start(args, lpszFmt);
141 bool r = m_Write(EVENTLOG_INFORMATION_TYPE, eventId, 0, NULL, lpszFmt, args);
142 va_end(args);
143 return r;
144 }
145
156 bool Information(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt, ...) const
157 {
158 ASSERT( ! ::IsBadReadPtr(lpData, dataSize) );
159 va_list args;
160 va_start(args, lpszFmt);
161 bool r = m_Write(EVENTLOG_INFORMATION_TYPE, eventId, dataSize, lpData, lpszFmt, args);
162 va_end(args);
163 return r;
164 }
165
174 bool Warning(DWORD eventId, LPCTSTR lpszFmt, ...) const
175 {
176 va_list args;
177 va_start(args, lpszFmt);
178 bool r = m_Write(EVENTLOG_WARNING_TYPE, eventId, 0, NULL, lpszFmt, args);
179 va_end(args);
180 return r;
181 }
182
193 bool Warning(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt, ...) const
194 {
195 ASSERT( ! ::IsBadReadPtr(lpData, dataSize) );
196 va_list args;
197 va_start(args, lpszFmt);
198 bool r = m_Write(EVENTLOG_WARNING_TYPE, eventId, dataSize, lpData, lpszFmt, args);
199 va_end(args);
200 return r;
201 }
202
211 bool Error(DWORD eventId, LPCTSTR lpszFmt, ...) const
212 {
213 va_list args;
214 va_start(args, lpszFmt);
215 bool r = m_Write(EVENTLOG_ERROR_TYPE, eventId, 0, NULL, lpszFmt, args);
216 va_end(args);
217 return r;
218 }
219
230 bool Error(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt, ...) const
231 {
232 ASSERT( ! ::IsBadReadPtr(lpData, dataSize) );
233 va_list args;
234 va_start(args, lpszFmt);
235 bool r = m_Write(EVENTLOG_ERROR_TYPE, eventId, dataSize, lpData, lpszFmt, args);
236 va_end(args);
237 return r;
238 }
239
240private:
241 // キー名
242 LPCTSTR m_KeyName(void) const
243 {
244 return _T("SYSTEM\\CurrentControlSet\\Services\\Eventlog\\Application");
245 }
246 // 書き込み
247 bool m_Write(WORD type, DWORD eventId, size_t binarySize, LPCVOID lpBinary, LPCTSTR lpszFmt, va_list V) const
248 {
249 bool r = false;
250 CStr str;
251 str.FormatV(lpszFmt, V);
252 LPCTSTR lpszMsg = str;
253 HANDLE h = ::RegisterEventSource(NULL, m_sourceName);
254 if ( h == NULL )
255 {
256 _GetLastError("RegisterEventSource");
257 return false;
258 }
259 r = !! ::ReportEvent(h, type, 0, eventId, NULL, 1, static_cast<DWORD>(binarySize), &lpszMsg, const_cast<LPVOID>(lpBinary));
260 if ( ! r )
261 {
262 _GetLastError("ReportEvent");
263 }
264 ::DeregisterEventSource(h);
265 return r;
266 }
267
268 CStr m_sourceName;
269};
270
271
272
273}; // TNB
274
275
レジストリアクセス関係のヘッダ
シングルトン関係のヘッダ
文字列処理関係のヘッダ
イベントロガー
bool RegistEventSource(LPCTSTR lpszModuleName=NULL)
[登録] イベントソース登録.
void SetSourceName(LPCTSTR lpszSourceName)
[設定] ソース名設定.
bool Error(DWORD eventId, LPCTSTR lpszFmt,...) const
[出力] エラー出力.
bool Warning(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt,...) const
[出力] 警告出力(データ付き).
bool Information(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt,...) const
[出力] 情報出力(データ付き).
bool Error(DWORD eventId, size_t dataSize, LPCVOID lpData, LPCTSTR lpszFmt,...) const
[出力] エラー出力(データ付き).
bool Information(DWORD eventId, LPCTSTR lpszFmt,...) const
[出力] 情報出力.
void UnregistEventSource(void)
[登録] イベントソース登録解除.
bool Warning(DWORD eventId, LPCTSTR lpszFmt,...) const
[出力] 警告出力.
LPCTSTR GetSourceName(void) const
[取得] ソース名取得.
レジストリアクセスクラス
virtual bool DeleteSection(LPCTSTR lpszSectionName)
[削除] 指定セクション削除
void FormatV(const TYP *lpszFormat, va_list V)
[代入] 書式付き文字列代入.
Definition: TnbStr.h:349
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbStr.h:528
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbStr.h:954
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
Definition: TnbStr.h:914
セクション情報アクセスクラス
Definition: TnbAccessor.h:294
bool WriteString(LPCTSTR lpszKey, LPCTSTR lpszValue)
[追加] 文字列情報記録
Definition: TnbAccessor.h:495
CStr GetProcessName(void)
[取得] プロセスネーム取得.
Definition: TnbStrEx.h:85
TNB Library
Definition: TnbDoxyTitle.txt:2