Index: src/common/TLogSink.cpp =================================================================== diff -u -N --- src/common/TLogSink.cpp (revision b8b97b70743c49fcc2aee0db4cb7118db5e26dab) +++ src/common/TLogSink.cpp (revision 0) @@ -1,84 +0,0 @@ -// ============================================================================ -// Copyright (C) 2001-2016 by Jozef Starosczyk -// ixen@copyhandler.com -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU Library General Public License -// (version 2) as published by the Free Software Foundation; -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU Library General Public -// License along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// ============================================================================ -#include "stdafx.h" -#include "TLogSink.h" -#include "..\libchcore\TFileException.h" - -namespace chcore -{ - TLogSink::TLogSink(const chcore::TSmartPath& pathLog) - : m_pathLog(pathLog) - { - } - - HANDLE TLogSink::GetFileHandle() - { - if (m_handleFile != INVALID_HANDLE_VALUE) - return m_handleFile; - - m_handleFile = CreateFile(m_pathLog.ToString(), GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - if (m_handleFile == INVALID_HANDLE_VALUE) - throw TFileException(eErr_CannotOpenFile, GetLastError(), m_pathLog, L"Cannot open log file", LOCATION); - - LARGE_INTEGER liSeek = { 0 }; - - BOOL bRes = SetFilePointerEx(m_handleFile, liSeek, nullptr, SEEK_END); - if (!bRes) - throw TFileException(eErr_CannotOpenFile, GetLastError(), m_pathLog, L"Cannot seek to the end of log file", LOCATION); - - return m_handleFile; - } - - unsigned long long TLogSink::GetCurrentLogSize() - { - LARGE_INTEGER liSize = { 0 }; - if (!GetFileSizeEx(GetFileHandle(), &liSize)) - throw new TFileException(eErr_CannotGetFileInfo, GetLastError(), m_pathLog, L"Cannot determine current log size", LOCATION); - - return liSize.QuadPart; - } - - void TLogSink::AddRotatedFile(const TSmartPath& rPath) - { - m_setRotatedFiles.insert(rPath); - } - - void TLogSink::RemoveObsoleteRotatedLogs(unsigned int uiMaxRotatedFiles) - { - while (m_setRotatedFiles.size() > uiMaxRotatedFiles) - { - auto iterRotatedFile = m_setRotatedFiles.begin(); - if (!DeleteFile(iterRotatedFile->ToString())) - break; - - m_setRotatedFiles.erase(iterRotatedFile); - } - } - - void chcore::TLogSink::CloseLogFile() - { - m_handleFile.Close(); - } - - void chcore::TLogSink::CloseIfTimedOut(unsigned long long ullCurrentTimestamp, unsigned long long ullMaxHandleCacheTime) - { - if (ullCurrentTimestamp - m_ullLastUsageTimestamp > ullMaxHandleCacheTime) - CloseLogFile(); - } -}