2424#ifdef _MSC_VER
2525#include < windows.h>
2626#endif
27+ #include " PolyLogger.h"
2728#include < stdio.h>
2829#include < stdarg.h>
2930#include < string>
3031#include < iostream>
32+ #include < time.h>
3133
3234using namespace Polycode ;
3335
36+ Logger* Logger::overrideInstance = NULL ;
37+
3438LoggerEvent::LoggerEvent (String message) : Event() {
3539 this ->message = message;
3640}
@@ -41,11 +45,12 @@ LoggerEvent::~LoggerEvent() {
4145
4246
4347Logger::Logger () : EventDispatcher() {
44-
48+ logToFile = false ;
49+ logFile = fopen (" poly.log" , " w" );
4550}
4651
4752Logger::~Logger () {
48-
53+ fclose (logFile);
4954}
5055
5156void Logger::logBroadcast (String message) {
@@ -62,6 +67,12 @@ void Logger::log(const char *format, ...) {
6267 va_start (args, format);
6368 vfprintf (stderr, format, args);
6469 va_end (args);
70+
71+ if (Logger::getInstance ()->getLogToFile ()){
72+ va_start (args, format);
73+ vfprintf (Logger::getInstance ()->getLogFile (), format, args);
74+ va_end (args);
75+ }
6576
6677#ifdef _MSC_VER
6778#ifdef _DEBUG
@@ -84,3 +95,37 @@ void Logger::log(const char *format, ...) {
8495#endif
8596
8697}
98+
99+ void Logger::setLogToFile (bool val){
100+ if (!logToFile && val){
101+ time_t t = time (NULL );
102+ char mbstr[100 ];
103+ if (strftime (mbstr, sizeof (mbstr), " %y_%m_%d.log" , localtime (&t))) {
104+ // if (logFile)
105+ // fclose(logFile);
106+ logFile = fopen ((const char *)mbstr, " w" );
107+ } else {
108+ logFile = fopen (" poly.log" , " w" );
109+ }
110+ }
111+
112+ logToFile = val;
113+ }
114+
115+ bool Logger::getLogToFile (){
116+ return logToFile;
117+ }
118+
119+ FILE *Logger::getLogFile (){
120+ return logFile;
121+ }
122+
123+ Logger *Logger::getInstance (){
124+ if (overrideInstance) {
125+ return overrideInstance;
126+ }
127+
128+ overrideInstance = new Logger;
129+ // Logger::log("Creating new logger instance...\n");
130+ return overrideInstance;
131+ }
0 commit comments