From 72f3802bd7ab24b672c951a287787b5dea253f3b Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期六, 02 八月 2025 10:48:36 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/SGMeasurement/Logger.cpp |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/SGMeasurement/Logger.cpp b/SourceCode/Bond/SGMeasurement/Logger.cpp
new file mode 100644
index 0000000..1908277
--- /dev/null
+++ b/SourceCode/Bond/SGMeasurement/Logger.cpp
@@ -0,0 +1,79 @@
+#include "pch.h"
+#include "Logger.h"
+
+CLogger& CLogger::Instance()
+{
+    static CLogger instance;
+    return instance;
+}
+
+CLogger::CLogger()
+{
+	OpenLogFile();
+}
+
+CLogger::~CLogger()
+{
+    CloseLogFile();
+}
+
+void CLogger::OpenLogFile()
+{
+    CSingleLock lock(&m_csLogLock, TRUE);
+
+    CTime now = CTime::GetCurrentTime();
+    CString strLogDir = _T("Log");
+
+    if (!PathFileExists(strLogDir)) {
+        CreateDirectory(strLogDir, NULL);
+    }
+
+    CString strNewPath;
+    strNewPath.Format(_T("%s\\SG_%04d%02d%02d.log"), strLogDir, now.GetYear(), now.GetMonth(), now.GetDay());
+
+    if (m_strCurrentLogPath.CompareNoCase(strNewPath) != 0 || m_logFile.m_pStream == nullptr) {
+        if (m_logFile.m_pStream) {
+            m_logFile.Flush();
+            m_logFile.Close();
+        }
+
+        if (m_logFile.Open(strNewPath,
+            CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeBinary)) {
+
+            if (m_logFile.GetLength() == 0) {
+                WCHAR bom = 0xFEFF;
+                m_logFile.Write(&bom, sizeof(WCHAR));
+            }
+
+            m_logFile.SeekToEnd();
+            m_strCurrentLogPath = strNewPath;
+        }
+    }
+}
+
+void CLogger::WriteLine(CString str)
+{
+    CSingleLock lock(&m_csLogLock, TRUE);
+
+    OpenLogFile();
+
+    if (m_logFile.m_pStream) {
+        CTime now = CTime::GetCurrentTime();
+        CString strTime;
+        strTime.Format(_T("[%02d:%02d:%02d]"), now.GetHour(), now.GetMinute(), now.GetSecond());
+
+        CString strLine = strTime + str + _T("\r\n");
+        m_logFile.Write((LPCTSTR)strLine, strLine.GetLength() * sizeof(WCHAR));
+    }
+}
+
+void CLogger::CloseLogFile()
+{
+    CSingleLock lock(&m_csLogLock, TRUE);
+
+    if (m_logFile.m_pStream) {
+        m_logFile.Flush();
+        m_logFile.Close();
+        m_strCurrentLogPath.Empty();
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3