Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
Log.cpp
[詳解]
1// ----------------------------------------------------------------------------
6
7#include "pch.h"
8#include "Log.h"
9
10using namespace alt;
11
13{
16 _sRotation = 0;
17 _dwFileSize = 0;
18 ZeroMemory (&_localTime, sizeof (_localTime));
19}
20
22 LogLevel logLevel, LPCTSTR fileName, SHORT sRotation, DWORD dwFileSize)
23{
24 this->Init (logLevel, fileName, sRotation, dwFileSize);
25}
26
28{
29 _file.Close ();
30}
31
33 LogLevel logLevel, LPCTSTR fileName, SHORT sRotation, DWORD dwFileSize)
34{
35 _level = logLevel;
37 _baseFileName = fileName;
38 _sRotation = sRotation;
39 _dwFileSize = dwFileSize;
40
41 this->FindHistory ();
42 return this->AppendLog ();
43}
44
46{
47 BOOL ret = TRUE;
48
50
52 {
53 ret = this->CreateLog ();
54 }
55 else
56 {
57 ret = this->OpenLog ();
58 if (ret == TRUE)
59 {
61 ret = _file.SetPointer (FILE_END);
62 }
63 }
64
65 return ret;
66}
67
69{
70 BOOL ret = TRUE;
71
72 ret = _file.Create (
73 _logFileName.Ctr (), GENERIC_WRITE, FILE_SHARE_READ, CREATE_ALWAYS);
74
75 return ret;
76}
77
79{
80 BOOL ret = TRUE;
81
82 ret = _file.Create (
83 _logFileName.Ctr (), GENERIC_WRITE, FILE_SHARE_READ, OPEN_EXISTING);
84
85 return ret;
86}
87
89{
90 LPCTSTR ret = _T ("");
91
92 switch (logLevel)
93 {
94 case LogLevel::Fatal:
96 break;
97
98 case LogLevel::Error:
100 break;
101
102 case LogLevel::Warn:
104 break;
105
106 case LogLevel::Info:
108 break;
109
110 case LogLevel::Debug:
112 break;
113
114 case LogLevel::Trace:
116 break;
117
118 default:
119 break;
120 }
121
122 return ret;
123}
124
125VOID Log::LogWrite (LogLevel logLevel, LPCTSTR lpctszMessage, DWORD dwThreadID)
126{
127 _lock.Enter ();
128
129 ::GetLocalTime (&_localTime);
130 int iLength = lstrlen (lpctszMessage) + 40; // ヘッダー部(余裕あり)
131
132 LPTSTR buffer = new TCHAR[iLength];
133 wsprintf (buffer, _format,
134 _localTime.wYear, _localTime.wMonth, _localTime.wDay,
135 _localTime.wHour, _localTime.wMinute, _localTime.wSecond,
136 _localTime.wMilliseconds, dwThreadID,
137 this->GetLogLevelString (logLevel), lpctszMessage);
138 DWORD dwWriteSize = lstrlen (buffer) * sizeof (TCHAR);
139 _file.Write (buffer, dwWriteSize);
140 delete[] buffer;
141
142 _dwCurrentWriteSize += (DWORD)dwWriteSize;
144 {
145 _file.Close ();
146 this->FindHistory (); // 履歴状況を確認
147 this->RotateLogFile (); // ログローテーション
148 this->CreateLog (); // 新ファイルを作成
150 }
151
152 _lock.Leave ();
153}
154
156{
159 _sFileCount = static_cast<SHORT>(historyFiles.Size ());
160}
161
163{
164 TString previous (MAX_PATH);
165 TString current (MAX_PATH);
166
167 if (_sFileCount == _sRotation + 1)
168 {
169 wsprintf (
171 _sRotation);
172 FileUtility::Delete (current.Ptr ());
173 _sFileCount--;
174 }
175
176 for (int i = _sFileCount - 1; i > 0; i--)
177 {
178 wsprintf (
179 previous.Ptr (), _lpctszRotationFileName, _baseFileName.Ctr (), i);
180 wsprintf (
182 i + 1);
183 FileUtility::Move (previous.Ctr (), current.Ctr ());
184 }
185
186 wsprintf (previous.Ptr (), _lpctszLogFileName, _baseFileName.Ctr ());
187 wsprintf (current.Ptr (), _lpctszRotationFileName, _baseFileName.Ctr (), 1);
188 FileUtility::Move (previous.Ctr (), current.Ctr ());
189}
190
191VOID Log::Fatal (LPCTSTR lpctszMessage, DWORD dwThreadID)
192{
193 if (_level >= LogLevel::Fatal)
194 this->LogWrite (LogLevel::Fatal, lpctszMessage, dwThreadID);
195}
196
197VOID Log::Error (LPCTSTR lpctszMessage, DWORD dwThreadID)
198{
199 if (_level >= LogLevel::Error)
200 this->LogWrite (LogLevel::Error, lpctszMessage, dwThreadID);
201}
202
203VOID Log::Warn (LPCTSTR lpctszMessage, DWORD dwThreadID)
204{
205 if (_level >= LogLevel::Warn)
206 this->LogWrite (LogLevel::Warn, lpctszMessage, dwThreadID);
207}
208
209VOID Log::Info (LPCTSTR lpctszMessage, DWORD dwThreadID)
210{
211 if (_level >= LogLevel::Info)
212 this->LogWrite (LogLevel::Info, lpctszMessage, dwThreadID);
213}
214
215VOID Log::Debug (LPCTSTR lpctszMessage, DWORD dwThreadID)
216{
217 if (_level >= LogLevel::Debug)
218 this->LogWrite (LogLevel::Debug, lpctszMessage, dwThreadID);
219}
220
221VOID Log::Trace (LPCTSTR lpctszMessage, DWORD dwThreadID)
222{
223 if (_level >= LogLevel::Trace)
224 this->LogWrite (LogLevel::Trace, lpctszMessage, dwThreadID);
225}
void Init()
ストラテジーの初期化を行います。
Fileをベースとしたログに関する機能を集約したクラス
プリコンパイル済みヘッダー ファイルです。
VOID APIENTRY Enter()
排他処理開始
VOID APIENTRY Leave()
排他処理終了
BOOL APIENTRY Create(LPCTSTR lpctszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition)
ファイルを作成、オープンします。
Definition: File.cpp:12
LONGLONG APIENTRY GetSize() const
ファイルサイズを取得します。
Definition: File.cpp:51
BOOL APIENTRY SetPointer(DWORD dwMoveMethod, LARGE_INTEGER liDistanceToMove={ 0 }) const
ファイルポインタを移動します。
Definition: File.cpp:37
static skeleton::Array< FileInfo1 > APIENTRY Find(LPCTSTR target, LPCTSTR name, BOOL bRecurse=FALSE)
ファイルの検索
static BOOL APIENTRY Move(LPCTSTR source, LPCTSTR dest)
ファイルの移動
Definition: FileUtility.cpp:67
static BOOL APIENTRY IsExist(LPCTSTR name)
ディレクトリ・ファイルの存在確認
static BOOL APIENTRY Delete(LPCTSTR name)
ファイルの削除
Definition: FileUtility.cpp:57
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
APIENTRY ~Log()
デストラクタ
Definition: Log.cpp:27
VOID APIENTRY Trace(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
トレースログの出力
Definition: Log.cpp:221
BOOL APIENTRY Init(LogLevel logLevel, LPCTSTR fileName, SHORT sRotation, DWORD dwFileSize)
初期化
Definition: Log.cpp:32
DWORD _dwFileSize
ログローテーション数
Definition: Log.h:116
VOID APIENTRY Info(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
情報ログの出力
Definition: Log.cpp:209
LPCTSTR _lpctszLogLevelTrace
Definition: Log.h:130
File _file
Definition: Log.h:108
LPCTSTR _lpctszLogLevelFatal
Definition: Log.h:125
VOID APIENTRY Warn(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
警告ログの出力
Definition: Log.cpp:203
LPCTSTR _lpctszRotationFileName
Definition: Log.h:123
VOID APIENTRY FindHistory()
Definition: Log.cpp:155
LPCTSTR _lpctszSearchKeyword
Definition: Log.h:122
LPCTSTR _lpctszLogFileName
Definition: Log.h:121
BOOL APIENTRY CreateLog()
Definition: Log.cpp:68
LPCTSTR _lpctszLogLevelInfo
Definition: Log.h:128
SYSTEMTIME _localTime
ログファイル完全名
Definition: Log.h:112
SHORT _sRotation
現在までに確認できる履歴ファイル数
Definition: Log.h:115
TString _baseFileName
出力ログレベル
Definition: Log.h:110
LPCTSTR APIENTRY GetLogLevelString(LogLevel logLevel)
Definition: Log.cpp:88
VOID APIENTRY LogWrite(LogLevel logLevel, LPCTSTR pctszMessage, DWORD dwThreadID)
Definition: Log.cpp:125
VOID APIENTRY RotateLogFile()
Definition: Log.cpp:162
VOID APIENTRY Error(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
エラーログの出力
Definition: Log.cpp:197
LPCTSTR _lpctszLoglevelDebug
Definition: Log.h:129
LPCTSTR _lpctszLogLevelWarn
Definition: Log.h:127
LPCTSTR _format
書き込み時ロック
Definition: Log.h:118
CriticalSection _lock
ログファイルサイズ
Definition: Log.h:117
LPCTSTR _lpctszLogLevelError
Definition: Log.h:126
LogLevel _level
現在出力中のログファイル
Definition: Log.h:109
VOID APIENTRY Fatal(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
致命的エラーログの出力
Definition: Log.cpp:191
BOOL APIENTRY AppendLog()
Definition: Log.cpp:45
VOID APIENTRY Debug(LPCTSTR message, DWORD dwThreadID=GetCurrentThreadId())
デバッグログの出力
Definition: Log.cpp:215
SHORT _sFileCount
現在までに書き込んでいるログファイルサイズ
Definition: Log.h:114
APIENTRY Log()
コンストラクタ
Definition: Log.cpp:12
DWORD _dwCurrentWriteSize
ログに出力するシステム時刻
Definition: Log.h:113
TString _logFileName
ログファイルユーザー設定名
Definition: Log.h:111
BOOL APIENTRY OpenLog()
Definition: Log.cpp:78
LPCTSTR _lpctszExtension
Definition: Log.h:120
DWORD APIENTRY Write(LPCVOID lpcvBuffer, DWORD dwSize) const
HANDLEを使ってデータを書き込みます。
文字列に関するWindowsAPIを集約したクラス
Definition: TString.h:17
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:46
LPTSTR APIENTRY Ptr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:42
Definition: DBLibrary.h:12
LogLevel
ログの出力レベル
Definition: Log.h:19
@ Info
(3)情報
@ Warn
(2)警告
@ Fatal
(0)異常終了レベル
@ Error
(1)エラー
@ Debug
(4)デバッグ
@ Trace
(5)トレース