1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
///#include "LogManager.h
#include "stdafx.h"
#include <fstream>
#include <map>
#include <string>
#include <time.h>
#include <assert.h>
#include <cstring>
#include <cstdarg>
//#include <Windows.h> // Needed for creating directory...
#define MAX_MESSAGE_LENGTH 4096
namespace LogManagerNamespace
{
std::map<std::string, FILE *> ms_openedStreams;
void EnsureDirectory(const char * directory);
}
using namespace LogManagerNamespace;
void Log(const char * stream, const char * message, ...)
{
std::string streamName = stream;
std::map<std::string, FILE*>::iterator iter = ms_openedStreams.find(streamName);
if(iter == ms_openedStreams.end())
{
FILE * newFile;
std::pair<std::map<std::string, FILE*>::iterator, bool> retVal = ms_openedStreams.insert(std::make_pair(streamName, newFile));
if(retVal.second)
{
iter = retVal.first;
char nameBuffer[512];
memset(nameBuffer, 0, 512);
time_t timeNow = time(NULL);
tm formattedTime;
localtime_s(&formattedTime, &timeNow);
//EnsureDirectory(".\\Logs\\");
sprintf_s(nameBuffer, 512, "%s_%Iu_%Iu_%Iu_%Iu.txt", streamName.c_str(), formattedTime.tm_hour, formattedTime.tm_min, formattedTime.tm_sec, static_cast<unsigned long long>(timeNow));
errno_t fileStatus = fopen_s(&(iter->second), nameBuffer, "w");
assert(fileStatus == 0);
}
}
if(iter != ms_openedStreams.end())
{
char buffer[MAX_MESSAGE_LENGTH];
memset(buffer, 0, MAX_MESSAGE_LENGTH);
va_list args;
va_start(args, message);
vsprintf_s(buffer, message, args);
va_end(args);
fwrite(buffer, sizeof(char), strlen(buffer), iter->second); // Boom.
}
}
int main()
{
Log("Pravesh", "Program started at %d Millisecond\n", clock());
Log("Pravesh", "Now testing the log. Writing %d, %s \n",52,"Text");
Log("Pravesh","Exiting goodbye!! %s\n","San fransisco");
}
|