www.pudn.com > zfxcengine-0.1.0.zip > ceLogSystem.cpp
/* $Id: ceLogSystem.cpp,v 1.7 2005/08/12 19:20:41 kimmi Exp $ */
////////////////////////////////////////////////////////////////////////////////
// Module: Core
//! \file ceLogSystem.cpp
//! \brief Deklaration der Klasse ceLogSystem.
//! \author Clemens Scherer aka CMSCOPY
//
//
// Diese Datei steht unter der LGPL-Lizenz, welche
// im Hauptordner(ZFXC-Engine) unter LICENSE
// nachlesbar ist.
////////////////////////////////////////////////////////////////////////////////
#include "Core/ceLogSystem.h"
#include "Core/ceTimer.h"
#include "Core/ceMemManager.h"
namespace ZFXCE {
////////////////////////////////////////////////////////////////////////////////
using namespace std;
ceLogSystem *ceLogSystem::s_pClass = NULL;
//! \var Default name for log
static string l_strName = "ZFXCE_Log.txt";
////////////////////////////////////////////////////////////////////////////////
ceLogSystem *ceLogSystem::GetSingletonPtr()
{
PUSH_FUNCTION;
// Enshure existing
if (NULL == s_pClass) {
s_pClass = new ceLogSystem();
ce_assert(s_pClass != NULL);
}
return s_pClass;
}
////////////////////////////////////////////////////////////////////////////////
ceLogSystem& ceLogSystem::GetSingleton()
{
PUSH_FUNCTION;
if (NULL == s_pClass) {
s_pClass = new ceLogSystem();
ce_assert(s_pClass != NULL);
}
return *s_pClass;
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::Release()
{
PUSH_FUNCTION;
WriteTail();
// Wenn File noch offen, schliesse es
if(m_pFile.is_open())
m_pFile.close();
delete this;
}
////////////////////////////////////////////////////////////////////////////////
ceLogSystem::ceLogSystem()
{
PUSH_FUNCTION;
m_pFile.clear();
m_bOpen = FALSE;
}
////////////////////////////////////////////////////////////////////////////////
ceLogSystem::~ceLogSystem()
{
PUSH_FUNCTION;
Release();
}
////////////////////////////////////////////////////////////////////////////////
BOOL ceLogSystem::OpenLog(const string strFileName)
{
PUSH_FUNCTION;
if (0 == strFileName.size())
SetLogName(l_strName);
// Oeffne File mit Schreibzugriff
if (!m_bOpen) {
m_pFile.open(strFileName.c_str(),std::ios_base::out);
if (!m_pFile.good())
return FALSE;
// Write header
WriteHeader();
SetLogName(strFileName);
m_bOpen = TRUE;
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::CloseLog()
{
PUSH_FUNCTION;
// Write tail
if (m_pFile.is_open()) {
WriteTail();
m_pFile.close();
m_bOpen = FALSE;
}
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::WriteLog(const string strText)
{
PUSH_FUNCTION;
// Einfach auf std::cout ausgeben
if (!m_pFile.is_open()) {
cout << strText;
return;
}
// Schreibe Meldung in das Logfile
m_pFile << strText;
m_pFile.flush();
// Zusätzlicher Konsolen-Output
Debug::Print(strText);
}
////////////////////////////////////////////////////////////////////////////////
BOOL ceLogSystem::CheckStatus() const
{
return m_bOpen;
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::WriteHeader()
{
PUSH_FUNCTION;
ceTimer my;
ostringstream ausgabe;
// Checke Status vom Logfile
if (!m_bOpen)
return;
// Hole das aktuelle Datum
my.UpdateTimeOfDay();
// Schreibe Header
m_pFile.precision(1);
m_pFile.setf(ios::fixed);
m_pFile.fill(' ');
m_pFile << CE_LINENL;
ausgabe << "+++++ LogSystem Version " << CE_VERSION_LOG;
m_pFile << setiosflags(ios::left) << setw(61) << ausgabe.str();
m_pFile << "+++++\n";
m_pFile.precision(2);
ausgabe.seekp(0);
// ausgabe << "+++++ "<tm_mday<<"."<<(my.m_pDayTime->tm_mon)+1 << "."<<(my.m_pDayTime->tm_year)+1900
<<" um "<tm_hour<<":"<< std::setfill('0') << std::setw(2) << my.m_pDayTime->tm_min << ":" << std::setw(2) << my.m_pDayTime->tm_sec << " ";
m_pFile << setw(61) << ausgabe.str();
m_pFile << "+++++\n";
m_pFile << CE_LINENL << "\n\n";
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::SetLogName(string strName)
{
PUSH_FUNCTION;
if (0 == strName.size())
return;
m_strLog = strName;
}
////////////////////////////////////////////////////////////////////////////////
string ceLogSystem::GetLogName() const
{
PUSH_FUNCTION;
return m_strLog;
}
////////////////////////////////////////////////////////////////////////////////
void ceLogSystem::WriteTail()
{
PUSH_FUNCTION;
ceTimer my;
my.UpdateTimeOfDay();
ostringstream ausgabe;
// Schreibe Ende
m_pFile << "\n\n" <tm_mday<<"."<<(my.m_pDayTime->tm_mon)+1 << "."<<(my.m_pDayTime->tm_year)+1900
<<" um "<tm_hour<<":"<< std::setfill('0') << std::setw(2) << my.m_pDayTime->tm_min << ":" << std::setw(2) << my.m_pDayTime->tm_sec << " ";
m_pFile << std::setw(61) << ausgabe.str();
m_pFile << "+++++\n";
m_pFile << CE_LINENL;
}
////////////////////////////////////////////////////////////////////////////////
ceLogSystem &ceLogSystem::operator =(const ceLogSystem &rhs)
{
return *this;
}
} // Namespace ZFXCE