Solution46
LibLogOut::CLibLogOut クラスfinal

ログ出力ライブラリクラス [詳解]

#include "LibLogOut.h"

LibLogOut::CLibLogOut の継承関係図
Inheritance graph
LibLogOut::CLibLogOut 連携図
Collaboration graph

クラス

struct  SMappingInfo
 共有メモリ情報構造体 [詳解]
 
struct  SProcessInfo
 参照プロセス情報構造体 [詳解]
 

公開型

enum  EOutputDevice { EOutputDevice::Debug = 0, EOutputDevice::Console, EOutputDevice::File, EOutputDevice::Size }
 出力デバイス種別列挙体 [詳解]
 

公開メンバ関数

virtual wchar_t const * GetExeFile () noexcept
 実行ファイル名取得関数 [詳解]
 
virtual bool OutputString (wchar_t const *pszString) noexcept override
 文字列出力関数 [詳解]
 
virtual bool UpdateLineNumber () noexcept override
 行番号更新関数 [詳解]
 
virtual int GetLineNumber () noexcept override
 行番号取得関数 [詳解]
 
virtual int GetIndentCount () noexcept override
 インデントカウント取得関数 [詳解]
 
virtual bool Indent () noexcept override
 インデント関数 [詳解]
 
virtual bool Unindent () noexcept override
 アンインデント関数 [詳解]
 
virtual int GetRefferCount () noexcept
 参照プロセスカウント取得関数 [詳解]
 
virtual int GetCount () noexcept
 バッファカウント取得関数 [詳解]
 
virtual bool Flush () noexcept
 フラッシュ関数 [詳解]
 
virtual bool SetDeviceProcess (EOutputDevice eDevice, DWORD dwProcessId) noexcept
 出力デバイスプロセス設定関数 [詳解]
 
- 基底クラス LibCommon::CMapping に属する継承公開メンバ関数
 CMapping () noexcept
 コンストラクタ [詳解]
 
virtual ~CMapping () noexcept
 デストラクタ [詳解]
 
virtual HANDLE GetHandle () const noexcept override
 マッピングハンドル取得関数 [詳解]
 
virtual LPVOID GetView () const noexcept
 ビューポインタ取得関数 [詳解]
 
virtual void Close () noexcept override
 クローズ関数 [詳解]
 
virtual bool Create (DWORD dwSize, wchar_t const *pszObjectName=nullptr) noexcept
 作成関数 [詳解]
 
virtual bool Open (wchar_t const *pszObjectName) noexcept override
 オープン関数 [詳解]
 
- 基底クラス LibCommon::CMutex に属する継承公開メンバ関数
 CMutex () noexcept
 コンストラクタ [詳解]
 
virtual ~CMutex () noexcept
 デストラクタ [詳解]
 
virtual bool Release () noexcept override
 リリース関数 [詳解]
 
virtual bool Lock (DWORD dwTime=INFINITE) noexcept override
 ロック関数 [詳解]
 
virtual bool Unlock () noexcept override
 ロック解除関数 [詳解]
 
virtual bool Create (wchar_t const *pszObjectName=nullptr) noexcept
 作成関数 [詳解]
 
- 基底クラス LibCommon::CSync に属する継承公開メンバ関数
 CSync () noexcept
 コンストラクタ [詳解]
 
virtual ~CSync () noexcept
 デストラクタ [詳解]
 
virtual bool IsCreate () const noexcept
 新規作成状態取得関数 [詳解]
 
virtual bool Wait (DWORD dwTime=INFINITE) noexcept
 ウェイト関数 [詳解]
 
- 基底クラス LibCommon::CStreamOut に属する継承公開メンバ関数
virtual bool OutputChar (wchar_t ch) noexcept
 1文字出力関数 [詳解]
 
virtual bool OutputFormat (wchar_t const *pszFormat,...) noexcept
 書式設定文字列出力関数 [詳解]
 
virtual bool OutputArgs (wchar_t const *pszFormat, va_list vaArgs) noexcept
 引数リスト文字列出力関数 [詳解]
 
virtual bool OutputNewLine () noexcept
 改行出力関数 [詳解]
 
virtual bool OutputLineHeader () noexcept
 行ヘッダー出力関数 [詳解]
 
virtual bool OutputIndent () noexcept
 インデント出力関数 [詳解]
 
virtual bool OutputLineString (wchar_t const *pszString, bool bHeader=true, bool bIndent=true) noexcept
 文字列行出力関数 [詳解]
 
virtual bool OutputLineFormat (wchar_t const *pszFormat,...) noexcept
 書式設定文字列行出力関数 [詳解]
 
virtual bool OutputLineArgs (wchar_t const *pszFormat, va_list vaArgs) noexcept
 引数リスト文字列行出力関数 [詳解]
 
virtual bool ExOutputLineFormat (bool bHeader, bool bIndent, wchar_t const *pszFormat,...) noexcept
 拡張書式設定文字列行出力関数 [詳解]
 
virtual bool ExOutputLineArgs (bool bHeader, bool bIndent, wchar_t const *pszFormat, va_list vaArgs) noexcept
 拡張引数リスト文字列行出力関数 [詳解]
 

静的公開メンバ関数

static CLibLogOutGetInstance () noexcept
 インスタンス取得関数 [詳解]
 
static wchar_t const * GetProjectType () noexcept
 プロジェクト種別取得関数 [詳解]
 
static HINSTANCE GetInstanceHandle () noexcept
 インスタンスハンドル取得関数 [詳解]
 

静的公開変数類

static int const DEVICE_MAX = static_cast< int >( EOutputDevice::Size )
 出力デバイス最大値 [詳解]
 

限定公開メンバ関数

 CLibLogOut () noexcept
 コンストラクタ [詳解]
 
virtual ~CLibLogOut () noexcept
 デストラクタ [詳解]
 
virtual bool UpdateProcessInfo (bool bCurrent=false) noexcept
 プロセス情報更新関数 [詳解]
 
virtual bool OutputDevice () noexcept
 デバイス出力関数 [詳解]
 
- 基底クラス LibCommon::CStreamOut に属する継承限定公開メンバ関数
 CStreamOut () noexcept
 コンストラクタ [詳解]
 
virtual ~CStreamOut () noexcept
 デストラクタ [詳解]
 

静的限定公開メンバ関数

static DWORD WINAPI SubThreadProc (LPVOID lpParam) noexcept
 サブスレッド関数 [詳解]
 
static bool GetNewLogFilePath (wchar_t *pszPath, int nSize) noexcept
 新規ログ出力ファイルパス取得関数 [詳解]
 

限定公開変数類

SMappingInfom_psMappingInfo
 共有メモリ情報構造体ポインタ [詳解]
 
CEvent m_cEventRequest
 要求イベント [詳解]
 
CEvent m_cEventNotify
 通知イベント [詳解]
 
CFileStream m_cFileLog
 ログ出力ファイル [詳解]
 
CThread m_cThreadSub
 サブスレッド [詳解]
 
wchar_t m_szExeFile [MAX_PATH]
 実行ファイル名 [詳解]
 
- 基底クラス LibCommon::CMapping に属する継承限定公開変数類
HANDLE m_hMapping
 マッピングハンドル [詳解]
 
LPVOID m_pView
 ビューポインタ [詳解]
 
- 基底クラス LibCommon::CMutex に属する継承限定公開変数類
DWORD m_dwLockCount
 ロックカウント [詳解]
 
- 基底クラス LibCommon::CSync に属する継承限定公開変数類
HANDLE m_hObject
 オブジェクトハンドル [詳解]
 
bool m_bIsCreate
 新規作成フラグ [詳解]
 
- 基底クラス LibCommon::CStreamOut に属する継承限定公開変数類
int m_nLine
 行番号 [詳解]
 
int m_nIndent
 インデントカウント [詳解]
 

静的限定公開変数類

static int const BUFFER_SIZE = ( 1024 * 1024 - 1 )
 文字列バッファサイズ [詳解]
 
static int const PROCESS_MAX = 256
 最大参照プロセス数 [詳解]
 
static DWORD const NOTIFY_WAIT = 3000
 通知イベント待機時間 [詳解]
 
static wchar_t const *const OBJECT_NAME = L"LibLogOut::CLibLogOut"
 オブジェクト名 [詳解]
 
static wchar_t const *const EVENT_REQUEST_FORMAT = L"LibLogOut::CLibLogOut.EventRequest#%04X"
 要求イベント名書式設定文字列 [詳解]
 
static wchar_t const *const EVENT_NOTIFY_NAME = L"LibLogOut::CLibLogOut.EventNotify"
 通知イベント名 [詳解]
 
static CLibLogOut s_cInstance
 静的インスタンス [詳解]
 
- 基底クラス LibCommon::CMapping に属する継承静的限定公開変数類
static wchar_t const *const OBJECT_NAME_EXT = L".CMapping"
 オブジェクト名拡張子 [詳解]
 
- 基底クラス LibCommon::CMutex に属する継承静的限定公開変数類
static wchar_t const *const OBJECT_NAME_EXT = L".CMutex"
 オブジェクト名拡張子 [詳解]
 
- 基底クラス LibCommon::CStreamOut に属する継承静的限定公開変数類
static int const FORMAT_BUFFER_SIZE = ( 2048 - 1 )
 書式設定文字列バッファサイズ [詳解]
 

非公開メンバ関数

 CLibLogOut (CLibLogOut const &)=delete
 
CLibLogOutoperator= (CLibLogOut const &)=delete
 

詳解

ログ出力ライブラリクラス

ログ出力ライブラリクラスです。

注意
シングルトンクラスです。

LibLogOut.h64 行目に定義があります。

列挙型メンバ詳解

出力デバイス種別列挙体

出力デバイス種別列挙体です。

注意
なし
列挙値
Debug 

デバッグ出力

Console 

コンソール出力

File 

ファイル出力

Size 

列挙体サイズ

LibLogOut.h75 行目に定義があります。

75  {
76  Debug = 0, ///< デバッグ出力
77  Console, ///< コンソール出力
78  File, ///< ファイル出力
79  Size ///< 列挙体サイズ
80  };

構築子と解体子

LibLogOut::CLibLogOut::CLibLogOut ( )
explicitprotectednoexcept

コンストラクタ

コンストラクタです。

引数
なし
戻り値
なし
注意
なし

LibLogOut.cpp38 行目に定義があります。

参照先 LibCommon::CMapping::Close(), LibCommon::CMapping::Create(), DEVICE_MAX, EVENT_NOTIFY_NAME, EVENT_REQUEST_FORMAT, LibCommon::GetExeFileName(), GetNewLogFilePath(), LibCommon::CMapping::GetView(), LibCommon::CSync::IsCreate(), LibLogOut::CLibLogOut::SMappingInfo::m_bEnable, LibLogOut::CLibLogOut::SProcessInfo::m_dwProcessId, LibLogOut::CLibLogOut::SMappingInfo::m_dwProcessId, LibLogOut::CLibLogOut::SMappingInfo::m_nReffer, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_sProcess, LibLogOut::CLibLogOut::SMappingInfo::m_szPath, NotifyConstructor, NotifyFatalError, OBJECT_NAME, PROCESS_MAX, SubThreadProc() (計21項目).

40  : CMapping()
41  , CStreamOut()
42  // メンバ変数初期化
43  , m_psMappingInfo( nullptr )
44  , m_cEventRequest()
45  , m_cEventNotify()
46  , m_cFileLog()
47  , m_cThreadSub()
48  , m_szExeFile()
49  {
50  // コンストラクタ実行通知
52 
53  // 処理ブロック
54  bool result = false;
55  do {
56  // 実行モジュールファイルパスを取得する
57  GetExeFileName( m_szExeFile, MAX_PATH );
58 
59  // マッピングメモリを作成する
60  if ( !Create( sizeof( SMappingInfo ), OBJECT_NAME ) ) {
61  // 致命的エラー!
63  break;
64  }
65  // 同期処理ブロック
66  else do {
67  CSyncAuto cSyncAuto( *this );
68 
69  // 共有メモリ情報構造体ポインタを取得する
70  m_psMappingInfo = reinterpret_cast< SMappingInfo* >( GetView() );
71  if ( nullptr == m_psMappingInfo ) {
72  // 致命的エラー!
74  break;
75  }
76 
77  // プロセス情報を巡回する
78  DWORD dwProcessId = ::GetCurrentProcessId();
79  for ( int nIndex = 0;; ++nIndex ) {
80  // インデックスを調べる
81  if ( PROCESS_MAX <= nIndex ) {
82  // 致命的エラー!
84  break;
85  }
86  // プロセスIDを調べる
87  else if ( 0 == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
88  // プロセスIDを設定する
89  m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId = dwProcessId;
90  break;
91  }
92  }
93 
94  // 要求イベントを作成する
95  wchar_t szBuffer[ MAX_PATH ];
96  ::swprintf_s( szBuffer, EVENT_REQUEST_FORMAT, dwProcessId );
97  if ( !m_cEventRequest.Create( szBuffer ) ) {
98  // 致命的エラー!
100  break;
101  }
102  // 通知イベントを作成する
103  else if ( !m_cEventNotify.Create( EVENT_NOTIFY_NAME ) ) {
104  // 致命的エラー!
106  break;
107  }
108  // 新規作成か調べる
109  else if ( IsCreate() ) {
110  // デバイス種別を巡回する
111  for ( int nIndex = 0; DEVICE_MAX > nIndex; ++nIndex ) {
112  // 出力許可フラグを設定する
113  m_psMappingInfo->m_bEnable[ nIndex ] = true;
114 
115  // 出力プロセスIDを設定する
116  m_psMappingInfo->m_dwProcessId[ nIndex ] = dwProcessId;
117  }
118 
119  // 新規ログ出力ファイルパスを取得する
120  wchar_t szPath[ MAX_PATH ];
121  if ( !GetNewLogFilePath( szPath, MAX_PATH ) ) {
122  // 致命的エラー!
124  break;
125  }
126 
127  // パスをコピーする
128  ::wcscpy_s( m_psMappingInfo->m_szPath, szPath );
129 
130  // ログ出力ファイルを作成する
132  // 致命的エラー!
134  break;
135  }
136  }
137  // ログ出力ファイルを追記モードでオープンする
138  else if ( !m_cFileLog.OpenAppend( m_psMappingInfo->m_szPath ) ) {
139  // 致命的エラー!
141  break;
142  }
143 
144  // 参照プロセスカウントをインクリメントする
146 
147  // サブスレッドを起動する
148  if ( !m_cThreadSub.Create( SubThreadProc, this ) ) {
149  // 致命的エラー!
151  break;
152  }
153 
154  // 成功!
155  result = true;
156  } while ( false );
157  } while ( false );
158 
159  // 実行結果を調べる
160  if ( !result ) {
161  // サブスレッドをクローズする
163 
164  // ファイルをクローズする
165  m_cFileLog.Close();
166 
167  // 通知イベントをクローズする
169 
170  // 要求イベントをクローズする
172 
173  // マッピングをクローズする
174  Close();
175  }
176  }
#define NotifyConstructor()
コンストラクタ実行通知マクロ
Definition: LibUtility.h:24
CThread m_cThreadSub
サブスレッド
Definition: LibLogOut.h:399
virtual void Close() noexcept
クローズ関数
Definition: CSync.cpp:45
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
static wchar_t const *const EVENT_NOTIFY_NAME
通知イベント名
Definition: LibLogOut.h:407
wchar_t m_szExeFile[MAX_PATH]
実行ファイル名
Definition: LibLogOut.h:400
static DWORD WINAPI SubThreadProc(LPVOID lpParam) noexcept
サブスレッド関数
Definition: LibLogOut.cpp:780
CEvent m_cEventRequest
要求イベント
Definition: LibLogOut.h:396
virtual LPVOID GetView() const noexcept
ビューポインタ取得関数
Definition: CMapping.h:79
CMapping() noexcept
コンストラクタ
Definition: CMapping.cpp:29
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
wchar_t m_szPath[MAX_PATH]
ログ出力ファイルパス
Definition: LibLogOut.h:383
static bool GetNewLogFilePath(wchar_t *pszPath, int nSize) noexcept
新規ログ出力ファイルパス取得関数
Definition: LibLogOut.cpp:810
virtual bool IsCreate() const noexcept
新規作成状態取得関数
Definition: CSync.h:81
virtual bool Create(LPTHREAD_START_ROUTINE pfnFunc, LPVOID lpParam) noexcept
作成関数
Definition: CThread.cpp:63
virtual bool OpenAppend(wchar_t const *pszPath, UINT uCodePage=CP_UTF16) noexcept
追記モードオープン関数
Definition: CFile.cpp:133
virtual bool Create(wchar_t const *pszObjectName=nullptr) noexcept
作成関数
Definition: CEvent.cpp:44
DWORD m_dwProcessId[DEVICE_MAX]
出力プロセスID配列
Definition: LibLogOut.h:385
static wchar_t const *const OBJECT_NAME
オブジェクト名
Definition: LibLogOut.h:405
static wchar_t const *const EVENT_REQUEST_FORMAT
要求イベント名書式設定文字列
Definition: LibLogOut.h:406
SProcessInfo m_sProcess[PROCESS_MAX]
参照プロセス情報構造体配列
Definition: LibLogOut.h:386
CStreamOut() noexcept
コンストラクタ
Definition: CStreamOut.cpp:30
int m_nReffer
参照プロセスカウント
Definition: LibLogOut.h:378
virtual void Close() noexcept
クローズ関数
Definition: CFile.cpp:196
virtual bool Create(wchar_t const *pszPath, UINT uCodePage=CP_UTF16) noexcept
作成関数
Definition: CFile.cpp:52
virtual bool Create(DWORD dwSize, wchar_t const *pszObjectName=nullptr) noexcept
作成関数
Definition: CMapping.cpp:65
LIB_COMMON_API wchar_t const * GetExeFileName(wchar_t *pszBuffer, size_t uSize) noexcept
実行ファイル名取得関数
Definition: LibUtility.cpp:272
virtual void Close() noexcept override
クローズ関数
Definition: CThread.cpp:46
bool m_bEnable[DEVICE_MAX]
出力許可フラグ配列
Definition: LibLogOut.h:384
static int const DEVICE_MAX
出力デバイス最大値
Definition: LibLogOut.h:85
CFileStream m_cFileLog
ログ出力ファイル
Definition: LibLogOut.h:398
CEvent m_cEventNotify
通知イベント
Definition: LibLogOut.h:397
virtual void Close() noexcept override
クローズ関数
Definition: CMapping.cpp:48
DWORD m_dwProcessId
プロセスID
Definition: LibLogOut.h:366
static int const PROCESS_MAX
最大参照プロセス数
Definition: LibLogOut.h:352

呼び出し関係図:

LibLogOut::CLibLogOut::~CLibLogOut ( )
protectedvirtualnoexcept

デストラクタ

デストラクタです。

引数
なし
戻り値
なし
注意
なし

LibLogOut.cpp180 行目に定義があります。

参照先 ConsoleChar, ConsoleClearInput, ConsoleKbHitDirect, ConsoleNewLine, ConsoleWindowHandle, Flush(), LibLogOut::CLibLogOut::SMappingInfo::m_nCount, LibLogOut::CLibLogOut::SMappingInfo::m_nReffer, m_psMappingInfo, NotifyDestructor, UpdateProcessInfo().

180  {
181  // デストラクタ実行通知
183 
184  // 同期処理ブロック
185  do {
186  CSyncAuto cSyncAuto( *this );
187 
188  // プロセス情報を更新する
189  UpdateProcessInfo( true );
190 
191  // 参照プロセスカウントを調べる
192  if ( 0 == m_psMappingInfo->m_nReffer ) {
193  // バッファカウントを調べる
194  if ( 0 < m_psMappingInfo->m_nCount ) {
195  // フラッシュする
196  Flush();
197  ConsoleNewLine();
198  }
199 
200  // コンソールウィンドウハンドルを調べる
201  if ( nullptr != ConsoleWindowHandle() ) {
202  // 終了演出をするかどうかしらべる
203  if ( true ) {
204  // コンソール入力バッファをクリアする
206 
207  // 巡回する
208  wchar_t const* pszMessage = L"ダイセンジガケ ダラナヨサ";
209  for ( ;; ++pszMessage ) {
210  // キー入力を調べる
211  if ( ConsoleKbHitDirect() ) {
212  // 終了!
213  break;
214  }
215  // 文字コードを調べる
216  else if ( L'\0' == *pszMessage ) {
217  // 巡回する
218  for ( int nIndex = 0; 100 > nIndex; ++nIndex ) {
219  // キー入力を調べる
220  if ( ConsoleKbHitDirect() ) {
221  // 終了!
222  break;
223  }
224 
225  // 少し待つ
226  ::Sleep( 10 );
227  }
228  ConsoleNewLine();
229  break;
230  }
231  // 文字コードを調べる
232  else if ( L' ' == *pszMessage ) {
233  // 巡回する
234  for ( int nIndex = 0; 50 > nIndex; ++nIndex ) {
235  // キー入力を調べる
236  if ( ConsoleKbHitDirect() ) {
237  // 終了!
238  break;
239  }
240 
241  // 少し待つ
242  ::Sleep( 10 );
243  }
244  }
245  else {
246  // 巡回する
247  for ( int nIndex = 0; 25 > nIndex; ++nIndex ) {
248  // キー入力を調べる
249  if ( ConsoleKbHitDirect() ) {
250  // 終了!
251  break;
252  }
253 
254  // 少し待つ
255  ::Sleep( 10 );
256  }
257 
258  // 1文字出力する
259  ConsoleChar( *pszMessage );
260  }
261  }
262  }
263  }
264  }
265  } while ( false );
266  }
virtual bool Flush() noexcept
フラッシュ関数
Definition: LibLogOut.cpp:479
#define NotifyDestructor()
デストラクタ実行通知マクロ
Definition: LibUtility.h:25
virtual bool UpdateProcessInfo(bool bCurrent=false) noexcept
プロセス情報更新関数
Definition: LibLogOut.cpp:599
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
#define ConsoleNewLine()
改行出力マクロ
Definition: CConsole.h:29
#define ConsoleChar(...)
1文字出力マクロ
Definition: CConsole.h:26
int m_nReffer
参照プロセスカウント
Definition: LibLogOut.h:378
#define ConsoleWindowHandle()
ウィンドウハンドル取得マクロ
Definition: CConsole.h:44
int m_nCount
バッファカウント
Definition: LibLogOut.h:380
#define ConsoleKbHitDirect()
直接入力検査マクロ
Definition: CConsole.h:63
#define ConsoleClearInput()
入力バッファクリアマクロ
Definition: CConsole.h:64

呼び出し関係図:

LibLogOut::CLibLogOut::CLibLogOut ( CLibLogOut const &  )
privatedelete

関数詳解

virtual wchar_t const* LibLogOut::CLibLogOut::GetExeFile ( )
inlinevirtualnoexcept

実行ファイル名取得関数

実行ファイル名取得関数です。

引数
なし
戻り値
文字列ポインタ
注意
なし

LibLogOut.h124 行目に定義があります。

124 { return m_szExeFile; }
wchar_t m_szExeFile[MAX_PATH]
実行ファイル名
Definition: LibLogOut.h:400
bool LibLogOut::CLibLogOut::OutputString ( wchar_t const *  pszString)
overridevirtualnoexcept

文字列出力関数

文字列出力関数です。

引数
[in]pszString文字列ポインタ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバーライド関数です。

LibCommon::CStreamOutを実装しています。

LibLogOut.cpp272 行目に定義があります。

参照先 Flush(), LibLogOut::CLibLogOut::SMappingInfo::m_nCount, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_szBuffer, NotifyFatalError.

272  {
273  // 処理ブロック
274  bool result = false;
275  do {
276  // 文字列ポインタを調べる
277  if ( nullptr == pszString ) {
278  // 失敗!
279  break;
280  }
281  // 同期処理ブロック
282  else do {
283  CSyncAuto cSyncAuto( *this );
284 
285  // 巡回する
286  for ( ;; ++pszString ) {
287  // 文字コードを調べる
288  if ( L'\0' == *pszString ) {
289  // 成功!
290  result = true;
291  break;
292  }
293  // バッファカウントを調べる
294  else if ( BUFFER_SIZE <= m_psMappingInfo->m_nCount ) {
295  // フラッシュする
296  if ( !Flush() ) {
297  // 致命的エラー!
299  break;
300  }
301  // バッファカウントを調べる
302  else if ( BUFFER_SIZE <= m_psMappingInfo->m_nCount ) {
303  // 致命的エラー!
305  break;
306  }
307  }
308 
309  // 文字列バッファに1文字追加する
311  }
312  } while ( false );
313  } while ( false );
314 
315  // 実行結果を返す
316  return result;
317  }
virtual bool Flush() noexcept
フラッシュ関数
Definition: LibLogOut.cpp:479
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
wchar_t m_szBuffer[BUFFER_SIZE+1]
文字列バッファ
Definition: LibLogOut.h:379
int m_nCount
バッファカウント
Definition: LibLogOut.h:380

呼び出し関係図:

bool LibLogOut::CLibLogOut::UpdateLineNumber ( )
overridevirtualnoexcept

行番号更新関数

行番号更新関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバーライド関数です。

LibCommon::CStreamOutを再実装しています。

LibLogOut.cpp321 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SMappingInfo::m_nLine, m_psMappingInfo.

321  {
322  // 同期処理ブロック
323  bool result = false;
324  do {
325  CSyncAuto cSyncAuto( *this );
326 
327  // 行番号をインクリメントする
329  } while ( false );
330 
331  // 実行結果を返す
332  return result;
333  }
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int LibLogOut::CLibLogOut::GetLineNumber ( )
overridevirtualnoexcept

行番号取得関数

行番号取得関数です。

引数
なし
戻り値
行番号
注意
オーバーライド関数です。

LibCommon::CStreamOutを再実装しています。

LibLogOut.cpp337 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SMappingInfo::m_nLine, m_psMappingInfo.

337  {
338  // 同期処理ブロック
339  int result = 0;
340  do {
341  CSyncAuto cSyncAuto( *this );
342 
343  // 行番号を取得する
344  result = m_psMappingInfo->m_nLine;
345  } while ( false );
346 
347  // 実行結果を返す
348  return result;
349  }
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int LibLogOut::CLibLogOut::GetIndentCount ( )
overridevirtualnoexcept

インデントカウント取得関数

インデントカウント取得関数です。

引数
なし
戻り値
インデントカウント
注意
オーバライド関数です。

LibCommon::CStreamOutを再実装しています。

LibLogOut.cpp353 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SMappingInfo::m_nIndent, m_psMappingInfo.

353  {
354  // 同期処理ブロック
355  int result = 0;
356  do {
357  CSyncAuto cSyncAuto( *this );
358 
359  // インデントカウントを取得する
360  result = m_psMappingInfo->m_nIndent;
361  } while ( false );
362 
363  // 実行結果を返す
364  return result;
365  }
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int m_nIndent
インデントカウント
Definition: LibLogOut.h:381
bool LibLogOut::CLibLogOut::Indent ( )
overridevirtualnoexcept

インデント関数

インデント関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバライド関数です。

LibCommon::CStreamOutを再実装しています。

LibLogOut.cpp369 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SProcessInfo::m_dwProcessId, LibLogOut::CLibLogOut::SProcessInfo::m_nIndent, LibLogOut::CLibLogOut::SMappingInfo::m_nIndent, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_sProcess, NotifyFatalError, PROCESS_MAX, UpdateProcessInfo().

369  {
370  // 同期処理ブロック
371  bool result = false;
372  do {
373  CSyncAuto cSyncAuto( *this );
374 
375  // プロセス情報を更新する
377 
378  // インデントカウントをインクリメントする
380 
381  // 巡回する
382  DWORD dwProcessId = ::GetCurrentProcessId();
383  for ( int nIndex = 0;; ++nIndex ) {
384  // インデックスを調べる
385  if ( PROCESS_MAX <= nIndex ) {
386  // 致命的エラー!
388  break;
389  }
390  // プロセスIDを調べる
391  else if ( dwProcessId == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
392  // インデントカウントをインクリメントする
393  ++m_psMappingInfo->m_sProcess[ nIndex ].m_nIndent;
394 
395  // 成功!
396  result = true;
397  break;
398  }
399  }
400  } while ( false );
401 
402  // 実行結果を返す
403  return result;
404  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
virtual bool UpdateProcessInfo(bool bCurrent=false) noexcept
プロセス情報更新関数
Definition: LibLogOut.cpp:599
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int m_nIndent
インデントカウント
Definition: LibLogOut.h:367
int m_nIndent
インデントカウント
Definition: LibLogOut.h:381
SProcessInfo m_sProcess[PROCESS_MAX]
参照プロセス情報構造体配列
Definition: LibLogOut.h:386
DWORD m_dwProcessId
プロセスID
Definition: LibLogOut.h:366
static int const PROCESS_MAX
最大参照プロセス数
Definition: LibLogOut.h:352

呼び出し関係図:

bool LibLogOut::CLibLogOut::Unindent ( )
overridevirtualnoexcept

アンインデント関数

アンインデント関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
オーバライド関数です。

LibCommon::CStreamOutを再実装しています。

LibLogOut.cpp408 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SProcessInfo::m_dwProcessId, LibLogOut::CLibLogOut::SProcessInfo::m_nIndent, LibLogOut::CLibLogOut::SMappingInfo::m_nIndent, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_sProcess, NotifyFatalError, PROCESS_MAX, UpdateProcessInfo().

408  {
409  // 同期処理ブロック
410  bool result = false;
411  do {
412  CSyncAuto cSyncAuto( *this );
413 
414  // プロセス情報を更新する
416 
417  // インデントカウントをデクリメントする
419 
420  // 巡回する
421  DWORD dwProcessId = ::GetCurrentProcessId();
422  for ( int nIndex = 0;; ++nIndex ) {
423  // インデックスを調べる
424  if ( PROCESS_MAX <= nIndex ) {
425  // 致命的エラー!
427  break;
428  }
429  // プロセスIDを調べる
430  else if ( dwProcessId == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
431  // インデントカウントをデクリメントする
432  --m_psMappingInfo->m_sProcess[ nIndex ].m_nIndent;
433 
434  // 成功!
435  result = true;
436  break;
437  }
438  }
439  } while ( false );
440 
441  // 実行結果を返す
442  return result;
443  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
virtual bool UpdateProcessInfo(bool bCurrent=false) noexcept
プロセス情報更新関数
Definition: LibLogOut.cpp:599
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int m_nIndent
インデントカウント
Definition: LibLogOut.h:367
int m_nIndent
インデントカウント
Definition: LibLogOut.h:381
SProcessInfo m_sProcess[PROCESS_MAX]
参照プロセス情報構造体配列
Definition: LibLogOut.h:386
DWORD m_dwProcessId
プロセスID
Definition: LibLogOut.h:366
static int const PROCESS_MAX
最大参照プロセス数
Definition: LibLogOut.h:352

呼び出し関係図:

int LibLogOut::CLibLogOut::GetRefferCount ( )
virtualnoexcept

参照プロセスカウント取得関数

参照プロセスカウント取得関数です。

引数
なし
戻り値
バッファカウント
注意
なし

LibLogOut.cpp447 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SMappingInfo::m_nReffer, m_psMappingInfo.

447  {
448  // 同期処理ブロック
449  int result = 0;
450  do {
451  CSyncAuto cSyncAuto( *this );
452 
453  // 参照プロセスカウントを取得する
454  result = m_psMappingInfo->m_nReffer;
455  } while ( false );
456 
457  // 実行結果を返す
458  return result;
459  }
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int m_nReffer
参照プロセスカウント
Definition: LibLogOut.h:378
int LibLogOut::CLibLogOut::GetCount ( )
virtualnoexcept

バッファカウント取得関数

バッファカウント取得関数です。

引数
なし
戻り値
バッファカウント
注意
なし

LibLogOut.cpp463 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SMappingInfo::m_nCount, m_psMappingInfo.

463  {
464  // 同期処理ブロック
465  int result = 0;
466  do {
467  CSyncAuto cSyncAuto( *this );
468 
469  // バッファカウントを取得する
470  result = m_psMappingInfo->m_nCount;
471  } while ( false );
472 
473  // 実行結果を返す
474  return result;
475  }
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
int m_nCount
バッファカウント
Definition: LibLogOut.h:380
bool LibLogOut::CLibLogOut::Flush ( )
virtualnoexcept

フラッシュ関数

フラッシュ関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibLogOut.cpp479 行目に定義があります。

参照先 DEVICE_MAX, EVENT_REQUEST_FORMAT, LibLogOut::CLibLogOut::SMappingInfo::m_bEnable, m_cEventNotify, LibLogOut::CLibLogOut::SMappingInfo::m_dwProcessId, LibLogOut::CLibLogOut::SMappingInfo::m_eDevice, LibLogOut::CLibLogOut::SMappingInfo::m_nCount, LibLogOut::CLibLogOut::SMappingInfo::m_nRequestPos, LibLogOut::CLibLogOut::SMappingInfo::m_nRequestSize, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_szBuffer, NOTIFY_WAIT, LibCommon::CEvent::Open(), OutputDevice(), LibCommon::CEvent::Set(), UpdateProcessInfo(), LibCommon::CSync::Wait() (計17項目).

参照元 OutputString(), ~CLibLogOut().

479  {
480  // 同期処理ブロック
481  bool result = false;
482  do {
483  CSyncAuto cSyncAuto( *this );
484 
485  // プロセス情報を更新する
487 
488  // 出力バッファを巡回する
489  DWORD dwProcessId = ::GetCurrentProcessId();
490  for ( int nIndex = 0, nCount = m_psMappingInfo->m_nCount;; ) {
491  // 残り文字数を調べる
492  if ( nCount <= nIndex ) {
493  // バッファカウントをクリアする
495 
496  // 成功!
497  result = true;
498  break;
499  }
500 
501  // 出力文字コードを巡回する
502  m_psMappingInfo->m_nRequestPos = nIndex;
504  for ( ; nCount > nIndex; ++nIndex ) {
505  // 出力要求サイズをインクリメントする
507 
508  // 文字コードを調べる
509  if ( L'\n' == m_psMappingInfo->m_szBuffer[ nIndex ] ) {
510  // インデックスをインクリメントする
511  ++nIndex;
512 
513  // 終了!
514  break;
515  }
516  }
517 
518  // 出力デバイスを巡回する
519  for ( int nDevice = 0; DEVICE_MAX > nDevice; ++nDevice ) {
520  // 出力許可フラグを調べる
521  if ( m_psMappingInfo->m_bEnable[ nDevice ] ) {
522  // 出力デバイス種別を設定する
523  m_psMappingInfo->m_eDevice = static_cast< EOutputDevice >( nDevice );
524 
525  // 出力プロセスIDを調べる
526  bool bResult = false;
527  if ( 0 != m_psMappingInfo->m_dwProcessId[ nDevice ] ) {
528  // 出力プロセスIDを調べる
529  if ( dwProcessId != m_psMappingInfo->m_dwProcessId[ nDevice ] ) {
530  // 要求イベントをオープンする
531  wchar_t szBuffer[ MAX_PATH ];
532  ::swprintf_s( szBuffer, EVENT_REQUEST_FORMAT, m_psMappingInfo->m_dwProcessId[ nDevice ] );
533  CEvent cRequest;
534  if ( cRequest.Open( szBuffer ) ) {
535  // 要求イベントをセットする
536  if ( cRequest.Set() ) {
537  // 通知イベントを待機する
538  if ( m_cEventNotify.Wait( NOTIFY_WAIT ) ) {
539  // 成功!
540  bResult = true;
541  }
542  }
543  }
544  }
545  }
546 
547  // 実行結果を調べる
548  if ( !bResult ) {
549  // カレントプロセスでデバイス出力する
550  OutputDevice();
551  }
552  }
553  }
554  }
555  } while ( false );
556 
557  // 実行結果を返す
558  return result;
559  }
int m_nRequestPos
出力要求開始位置
Definition: LibLogOut.h:388
virtual bool UpdateProcessInfo(bool bCurrent=false) noexcept
プロセス情報更新関数
Definition: LibLogOut.cpp:599
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
EOutputDevice
出力デバイス種別列挙体
Definition: LibLogOut.h:75
virtual bool Wait(DWORD dwTime=INFINITE) noexcept
ウェイト関数
Definition: CSync.cpp:59
EOutputDevice m_eDevice
出力要求デバイス種別
Definition: LibLogOut.h:387
DWORD m_dwProcessId[DEVICE_MAX]
出力プロセスID配列
Definition: LibLogOut.h:385
static wchar_t const *const EVENT_REQUEST_FORMAT
要求イベント名書式設定文字列
Definition: LibLogOut.h:406
int m_nRequestSize
出力要求サイズ
Definition: LibLogOut.h:389
static DWORD const NOTIFY_WAIT
通知イベント待機時間
Definition: LibLogOut.h:353
virtual bool OutputDevice() noexcept
デバイス出力関数
Definition: LibLogOut.cpp:703
wchar_t m_szBuffer[BUFFER_SIZE+1]
文字列バッファ
Definition: LibLogOut.h:379
int m_nCount
バッファカウント
Definition: LibLogOut.h:380
bool m_bEnable[DEVICE_MAX]
出力許可フラグ配列
Definition: LibLogOut.h:384
static int const DEVICE_MAX
出力デバイス最大値
Definition: LibLogOut.h:85
CEvent m_cEventNotify
通知イベント
Definition: LibLogOut.h:397

呼び出し関係図:

被呼び出し関係図:

bool LibLogOut::CLibLogOut::SetDeviceProcess ( EOutputDevice  eDevice,
DWORD  dwProcessId 
)
virtualnoexcept

出力デバイスプロセス設定関数

出力デバイスプロセス設定関数です。

引数
[in]eDeviceデバイス種別
[in]dwProcessIdプロセスID
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibLogOut.cpp563 行目に定義があります。

参照先 LibLogOut::CLibLogOut::SProcessInfo::m_dwProcessId, LibLogOut::CLibLogOut::SMappingInfo::m_dwProcessId, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_sProcess, PROCESS_MAX, UpdateProcessInfo().

563  {
564  // 同期処理ブロック
565  bool result = false;
566  do {
567  CSyncAuto cSyncAuto( *this );
568 
569  // プロセス情報を更新する
571 
572  // プロセス情報を巡回する
573  for ( int nIndex = 0;; ++nIndex ) {
574  // インデックスを調べる
575  if ( PROCESS_MAX <= nIndex ) {
576  // 失敗!
577  break;
578  }
579  // プロセスIDを調べる
580  else if ( dwProcessId == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
581  // 出力プロセスIDを設定する
582  m_psMappingInfo->m_dwProcessId[ static_cast< int >( eDevice ) ] = dwProcessId;
583 
584  // 成功!
585  result = true;
586  break;
587  }
588  }
589  } while ( false );
590 
591  // 実行結果を返す
592  return result;
593  }
virtual bool UpdateProcessInfo(bool bCurrent=false) noexcept
プロセス情報更新関数
Definition: LibLogOut.cpp:599
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
DWORD m_dwProcessId[DEVICE_MAX]
出力プロセスID配列
Definition: LibLogOut.h:385
SProcessInfo m_sProcess[PROCESS_MAX]
参照プロセス情報構造体配列
Definition: LibLogOut.h:386
DWORD m_dwProcessId
プロセスID
Definition: LibLogOut.h:366
static int const PROCESS_MAX
最大参照プロセス数
Definition: LibLogOut.h:352

呼び出し関係図:

bool LibLogOut::CLibLogOut::UpdateProcessInfo ( bool  bCurrent = false)
protectedvirtualnoexcept

プロセス情報更新関数

プロセス情報更新関数です。

引数
[in]bCurrentカレントプロセス削除フラグ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibLogOut.cpp599 行目に定義があります。

参照先 LibCommon::CProcess::Close(), DEVICE_MAX, LibCommon::CStreamOut::ExOutputLineFormat(), LibLogOut::CLibLogOut::SProcessInfo::m_dwProcessId, LibLogOut::CLibLogOut::SMappingInfo::m_dwProcessId, LibLogOut::CLibLogOut::SProcessInfo::m_nIndent, LibLogOut::CLibLogOut::SMappingInfo::m_nIndent, LibLogOut::CLibLogOut::SMappingInfo::m_nReffer, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_sProcess, NotifyFatalError, LibCommon::CProcess::Open(), PROCESS_MAX, LibCommon::CSync::Wait().

参照元 Flush(), Indent(), SetDeviceProcess(), Unindent(), ~CLibLogOut().

599  {
600  // 同期処理ブロック
601  bool result = false;
602  do {
603  CSyncAuto cSyncAuto( *this );
604 
605  // プロセス情報を巡回する
606  DWORD dwProcessId = ::GetCurrentProcessId();
607  for ( int nIndex = 0;; ++nIndex ) {
608  // インデックスを調べる
609  if ( PROCESS_MAX <= nIndex ) {
610  // 成功!
611  result = true;
612  break;
613  }
614  // プロセスIDを調べる
615  else if ( 0 == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
616  // 継続!
617  continue;
618  }
619  // プロセスIDを調べる
620  else if ( dwProcessId == m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) {
621  // カレントプロセス削除フラグを調べる
622  if ( !bCurrent ) {
623  // 継続!
624  continue;
625  }
626  }
627  else {
628  // プロセスをオープンする
629  CProcess cProcess;
630  if ( cProcess.Open( m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId ) ) {
631  // プロセス実行状態を調べる
632  if ( !cProcess.Wait( 0 ) ) {
633  // プロセスをクローズする
634  cProcess.Close();
635 
636  // 継続!
637  continue;
638  }
639 
640  // プロセスをクローズする
641  cProcess.Close();
642  }
643  }
644 
645  // インデックスカウントを減算する
647 
648  // 参照プロセスカウントを調べる
649  if ( 0 == m_psMappingInfo->m_nReffer ) {
650  // 致命的エラー!
652  break;
653  }
654 
655  // 参照プロセスカウントをデクリメントする
656  wchar_t const* pszMessage = L"";
657  if ( 0 == --m_psMappingInfo->m_nReffer ) {
658  // 生成消滅演算子情報更新ログを出力する
659  pszMessage = L", All Processes Termination";
660  }
661 
662  // プロセス終了ログを出力する
663  ExOutputLineFormat( true, false, L"Indent#%ld, By Terminated Process[%04X], Count = %ld%s."
667  , pszMessage );
668 
669  // デバイス種別を巡回する
670  for ( int nDevice = 0; DEVICE_MAX > nDevice; ++nDevice ) {
671  // プロセスIDを調べる
672  if ( m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId == m_psMappingInfo->m_dwProcessId[ nDevice ] ) {
673  // デバイス種別を巡回する
674  for ( int nDevice2 = 0;; ++nDevice2 ) {
675  // インデックスを調べる
676  if ( DEVICE_MAX <= nDevice2 ) {
677  // プロセスIDを設定する
678  m_psMappingInfo->m_dwProcessId[ nDevice ] = dwProcessId;
679  break;
680  }
681  // プロセスIDを調べる
682  else if ( ( 0 != m_psMappingInfo->m_dwProcessId[ nDevice2 ] ) && ( m_psMappingInfo->m_sProcess[ nIndex ].m_dwProcessId != m_psMappingInfo->m_dwProcessId[ nDevice2 ] ) ) {
683  // プロセスIDを設定する
684  m_psMappingInfo->m_dwProcessId[ nDevice ] = m_psMappingInfo->m_dwProcessId[ nDevice2 ];
685  break;
686  }
687  }
688  }
689  }
690 
691  // プロセス情報をクリアする
693  m_psMappingInfo->m_sProcess[ nIndex ].m_nIndent = 0;
694  }
695  } while ( false );
696 
697  // 実行結果を返す
698  return result;
699  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
DWORD m_dwProcessId[DEVICE_MAX]
出力プロセスID配列
Definition: LibLogOut.h:385
int m_nIndent
インデントカウント
Definition: LibLogOut.h:367
int m_nIndent
インデントカウント
Definition: LibLogOut.h:381
SProcessInfo m_sProcess[PROCESS_MAX]
参照プロセス情報構造体配列
Definition: LibLogOut.h:386
int m_nReffer
参照プロセスカウント
Definition: LibLogOut.h:378
static int const DEVICE_MAX
出力デバイス最大値
Definition: LibLogOut.h:85
virtual bool ExOutputLineFormat(bool bHeader, bool bIndent, wchar_t const *pszFormat,...) noexcept
拡張書式設定文字列行出力関数
Definition: CStreamOut.cpp:315
DWORD m_dwProcessId
プロセスID
Definition: LibLogOut.h:366
static int const PROCESS_MAX
最大参照プロセス数
Definition: LibLogOut.h:352

呼び出し関係図:

被呼び出し関係図:

bool LibLogOut::CLibLogOut::OutputDevice ( )
protectedvirtualnoexcept

デバイス出力関数

デバイス出力関数です。

引数
なし
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibLogOut.cpp703 行目に定義があります。

参照先 Console, ConsoleString, Debug, DebugString, File, m_cFileLog, LibLogOut::CLibLogOut::SMappingInfo::m_eDevice, LibLogOut::CLibLogOut::SMappingInfo::m_nRequestPos, LibLogOut::CLibLogOut::SMappingInfo::m_nRequestSize, m_psMappingInfo, LibLogOut::CLibLogOut::SMappingInfo::m_szBuffer, LibCommon::CFileStream::OutputString().

参照元 Flush(), SubThreadProc().

703  {
704  // 処理ブロック
705  bool result = false;
706  do {
707  // 文字列ポインタを取得する
708  wchar_t* pszString = &m_psMappingInfo->m_szBuffer[ m_psMappingInfo->m_nRequestPos ];
709 
710  // 終端文字を保存する
711  wchar_t ch = pszString[ m_psMappingInfo->m_nRequestSize ];
712 
713  // 終端文字を設定する
714  pszString[ m_psMappingInfo->m_nRequestSize ] = L'\0';
715 
716  // 出力要求デバイス種別を調べる
717  switch ( m_psMappingInfo->m_eDevice ) {
718  case EOutputDevice::Debug: // デバッグ出力
719  // デバッグ出力する
720  DebugString( pszString );
721 
722  // 成功!
723  result = true;
724  break;
725 
726  case EOutputDevice::Console: // コンソール出力
727  // コンソール出力する
728  ConsoleString( pszString );
729 
730  // 成功!
731  result = true;
732  break;
733 
734  case EOutputDevice::File: // ファイル出力
735  // ファイル出力する
736  m_cFileLog.OutputString( pszString );
737 
738  // 成功!
739  result = true;
740  break;
741  }
742 
743  // 終端文字を復元する
744  pszString[ m_psMappingInfo->m_nRequestSize ] = ch;
745  } while ( false );
746 
747  // 実行結果を返す
748  return result;
749  }
int m_nRequestPos
出力要求開始位置
Definition: LibLogOut.h:388
virtual bool OutputString(wchar_t const *pszString) noexcept override
文字列出力関数
Definition: CFileStream.cpp:38
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibLogOut.h:395
EOutputDevice m_eDevice
出力要求デバイス種別
Definition: LibLogOut.h:387
#define ConsoleString(...)
文字列出力マクロ
Definition: CConsole.h:27
int m_nRequestSize
出力要求サイズ
Definition: LibLogOut.h:389
wchar_t m_szBuffer[BUFFER_SIZE+1]
文字列バッファ
Definition: LibLogOut.h:379
CFileStream m_cFileLog
ログ出力ファイル
Definition: LibLogOut.h:398
#define DebugString(...)
文字列出力マクロ
Definition: CDebug.h:24

呼び出し関係図:

被呼び出し関係図:

static CLibLogOut& LibLogOut::CLibLogOut::GetInstance ( )
inlinestaticnoexcept

インスタンス取得関数

インスタンス取得関数です。

引数
なし
戻り値
インスタンス参照
注意
なし

LibLogOut.h293 行目に定義があります。

293 { return s_cInstance; }
static CLibLogOut s_cInstance
静的インスタンス
Definition: LibLogOut.h:412
wchar_t const * LibLogOut::CLibLogOut::GetProjectType ( )
staticnoexcept

プロジェクト種別取得関数

プロジェクト種別取得関数です。

引数
なし
戻り値
文字列ポインタ
注意
なし

LibLogOut.cpp755 行目に定義があります。

参照先 _PROJECT_TYPE.

参照元 AppTest::CAppTest::Main(), AppTest::CAppTestMenuConsole::ShowProjectInfo().

755  {
756  // プロジェクト種別文字列を返す
757  return _PROJECT_TYPE;
758  }
#define _PROJECT_TYPE
プロジェクト種別定義
Definition: LibCommonDef.h:88

被呼び出し関係図:

HINSTANCE LibLogOut::CLibLogOut::GetInstanceHandle ( )
staticnoexcept

インスタンスハンドル取得関数

インスタンスハンドル取得関数です。

引数
なし
戻り値
インスタンスハンドル
注意
なし

LibLogOut.cpp762 行目に定義があります。

参照元 AppTest::CAppTest::Main(), AppTest::CAppTestMenuConsole::ShowProjectInfo().

762  {
763 #if defined( _WINDLL ) && !defined( _MANAGED )
764 
765  // インスタンスハンドルを返す
766  return s_hInstance;
767 
768 # else
769 
770  // 実行モジュールのインスタンスハンドルを返す
771  return ::GetModuleHandleW( nullptr );
772 
773 # endif
774  }

被呼び出し関係図:

DWORD LibLogOut::CLibLogOut::SubThreadProc ( LPVOID  lpParam)
staticprotectednoexcept

サブスレッド関数

サブスレッド関数です。

引数
[in]lpParam引数ポインタ
戻り値
終了コード
注意
なし

LibLogOut.cpp780 行目に定義があります。

参照先 m_cEventNotify, m_cEventRequest, NotifyFatalError, OutputDevice(), LibCommon::CEvent::Set(), LibCommon::CSync::Wait().

参照元 CLibLogOut().

780  {
781  // 処理ブロック
782  DWORD result = 0;
783  do {
784  // インスタンスポインタを取得する
785  CLibLogOut*& rpcInstance = reinterpret_cast< CLibLogOut*& >( lpParam );
786  if ( nullptr == rpcInstance ) {
787  // 致命的エラー!
789  break;
790  }
791  // 巡回する
792  else for ( ;; ) {
793  // 要求イベントを待つ
794  if ( rpcInstance->m_cEventRequest.Wait() ) {
795  // デバイスに出力する
796  rpcInstance->OutputDevice();
797 
798  // 通知イベントをセットする
799  rpcInstance->m_cEventNotify.Set();
800  }
801  }
802  } while ( false );
803 
804  // 実行結果を返す
805  return result;
806  }
#define NotifyFatalError()
致命的エラー発生通知マクロ
Definition: LibUtility.h:22
CLibLogOut() noexcept
コンストラクタ
Definition: LibLogOut.cpp:38

呼び出し関係図:

被呼び出し関係図:

bool LibLogOut::CLibLogOut::GetNewLogFilePath ( wchar_t *  pszPath,
int  nSize 
)
staticprotectednoexcept

新規ログ出力ファイルパス取得関数

新規ログ出力ファイルパス取得関数です。

引数
[out]pszPath文字列バッファポインタ
[in]nSizeバッファサイズ
戻り値
実行結果
  • true 成功
  • false 失敗
注意
なし

LibLogOut.cpp810 行目に定義があります。

参照先 EVENT_NOTIFY_NAME, EVENT_REQUEST_FORMAT, LibCommon::GetExeFilePath(), OBJECT_NAME, s_cInstance.

参照元 CLibLogOut().

810  {
811  // 処理ブロック
812  bool result = false;
813  do {
814  // 実行ファイルパスを取得する
815  GetExeFilePath( pszPath, nSize );
816 
817  // ファイルパスを分解する
818  wchar_t szDrive[ _MAX_DRIVE ];
819  wchar_t szDir [ _MAX_DIR ];
820  wchar_t szFName[ _MAX_FNAME ];
821  wchar_t szExt [ _MAX_EXT ];
822  if ( 0 != ::_wsplitpath_s( pszPath, szDrive, szDir, szFName, szExt ) ) {
823  // 失敗!
824  break;
825  }
826  // ファイル検索文字列を作成する
827  else if ( 0 >= ::swprintf_s( pszPath, nSize, L"%s%s%s#??.log", szDrive, szDir, szFName ) ) {
828  // 失敗!
829  break;
830  }
831 
832  // ファイルを検索する
833  WORD wNumber = 0;
834  WIN32_FIND_DATAW sFindData;
835  HANDLE hFind = ::FindFirstFileW( pszPath, &sFindData );
836  if ( INVALID_HANDLE_VALUE != hFind ) {
837  // 巡回する
838  long long unsigned llMax = 0;
839  for ( ;; ) {
840  // ファイルパスを作成する
841  if ( 0 < ::swprintf_s( pszPath, nSize, L"%s%s%s", szDrive, szDir, sFindData.cFileName ) ) {
842  // ファイルをオープンする
843  HANDLE handle = ::CreateFileW( pszPath, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, nullptr );
844  if ( INVALID_HANDLE_VALUE != handle ) {
845  // 更新日時を取得する
846  FILETIME time;
847  if ( 0 != ::GetFileTime( handle, nullptr, nullptr, &time ) ) {
848  // 更新日時を比較する
849  long long unsigned tmp = ( static_cast< long long unsigned >( time.dwHighDateTime ) << 32 ) | static_cast< long long unsigned >( time.dwLowDateTime );
850  if ( llMax <= tmp ) {
851  // 最大値を更新する
852  llMax = tmp;
853 
854  // ログ出力ファイル番号を取得する
855  wNumber = static_cast< WORD >( ( ::wcstol( &sFindData.cFileName[ ::wcslen( szFName ) + 1 ], nullptr, 10 ) + 1 ) % 100 );
856  }
857  }
858 
859  // ファイルハンドルをクローズする
860  ::CloseHandle( handle );
861  }
862  }
863 
864  // 次のファイルを検索する
865  if ( 0 == ::FindNextFileW( hFind, &sFindData ) ) {
866  // 終了!
867  break;
868  }
869  }
870 
871  // ファイル検索ハンドルをクローズする
872  ::FindClose( hFind );
873  }
874 
875  // 新規ログ出力ファイルパスを作成する
876  ::swprintf_s( pszPath, nSize, L"%s%s%s#%02u.log", szDrive, szDir, szFName, wNumber );
877 
878  // 成功!
879  result = true;
880  } while ( false );
881 
882  // 実行結果を返す
883  return result;
884  }
LIB_COMMON_API wchar_t const * GetExeFilePath(wchar_t *pszBuffer, size_t uSize) noexcept
実行ファイルパス取得関数
Definition: LibUtility.cpp:225

呼び出し関係図:

被呼び出し関係図:

CLibLogOut& LibLogOut::CLibLogOut::operator= ( CLibLogOut const &  )
privatedelete

メンバ詳解

int const LibLogOut::CLibLogOut::DEVICE_MAX = static_cast< int >( EOutputDevice::Size )
static

出力デバイス最大値

LibLogOut.h85 行目に定義があります。

参照元 CLibLogOut(), Flush(), UpdateProcessInfo().

int const LibLogOut::CLibLogOut::BUFFER_SIZE = ( 1024 * 1024 - 1 )
staticprotected

文字列バッファサイズ

LibLogOut.h351 行目に定義があります。

int const LibLogOut::CLibLogOut::PROCESS_MAX = 256
staticprotected

最大参照プロセス数

LibLogOut.h352 行目に定義があります。

参照元 CLibLogOut(), Indent(), SetDeviceProcess(), Unindent(), UpdateProcessInfo().

DWORD const LibLogOut::CLibLogOut::NOTIFY_WAIT = 3000
staticprotected

通知イベント待機時間

LibLogOut.h353 行目に定義があります。

参照元 Flush().

SMappingInfo* LibLogOut::CLibLogOut::m_psMappingInfo
protected
CEvent LibLogOut::CLibLogOut::m_cEventRequest
protected

要求イベント

LibLogOut.h396 行目に定義があります。

参照元 SubThreadProc().

CEvent LibLogOut::CLibLogOut::m_cEventNotify
protected

通知イベント

LibLogOut.h397 行目に定義があります。

参照元 Flush(), SubThreadProc().

CFileStream LibLogOut::CLibLogOut::m_cFileLog
protected

ログ出力ファイル

LibLogOut.h398 行目に定義があります。

参照元 OutputDevice().

CThread LibLogOut::CLibLogOut::m_cThreadSub
protected

サブスレッド

LibLogOut.h399 行目に定義があります。

wchar_t LibLogOut::CLibLogOut::m_szExeFile[MAX_PATH]
protected

実行ファイル名

LibLogOut.h400 行目に定義があります。

wchar_t const *const LibLogOut::CLibLogOut::OBJECT_NAME = L"LibLogOut::CLibLogOut"
staticprotected

オブジェクト名

LibLogOut.h405 行目に定義があります。

参照元 CLibLogOut(), GetNewLogFilePath().

wchar_t const *const LibLogOut::CLibLogOut::EVENT_REQUEST_FORMAT = L"LibLogOut::CLibLogOut.EventRequest#%04X"
staticprotected

要求イベント名書式設定文字列

LibLogOut.h406 行目に定義があります。

参照元 CLibLogOut(), Flush(), GetNewLogFilePath().

wchar_t const *const LibLogOut::CLibLogOut::EVENT_NOTIFY_NAME = L"LibLogOut::CLibLogOut.EventNotify"
staticprotected

通知イベント名

LibLogOut.h407 行目に定義があります。

参照元 CLibLogOut(), GetNewLogFilePath().

CLibLogOut LibLogOut::CLibLogOut::s_cInstance
staticprotected

静的インスタンス

LibLogOut.h412 行目に定義があります。

参照元 GetNewLogFilePath().


このクラス詳解は次のファイルから抽出されました: