Skip to content

Commit 1e97cc2

Browse files
author
Joachim Meyer
committed
Implemented the option to log to a file (File name: yy_mm_dd.log)
1 parent 7fcf69c commit 1e97cc2

File tree

3 files changed

+69
-4
lines changed

3 files changed

+69
-4
lines changed

Core/Contents/Include/PolyLogger.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,25 @@ namespace Polycode {
6363
* @param str The c-string to log
6464
*/
6565
static void logw(const char *str);
66+
67+
void setLogToFile(bool val);
68+
bool getLogToFile();
69+
70+
/**
71+
* @return The file that is logged to
72+
*/
73+
FILE *getLogFile();
74+
75+
/**
76+
* @return The logger instance
77+
*/
78+
static Logger *getInstance();
79+
80+
protected:
81+
FILE *logFile;
82+
bool logToFile;
83+
84+
private:
85+
static Logger *overrideInstance;
6686
};
6787
}

Core/Contents/Source/PolyCoreServices.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Config *CoreServices::getConfig() {
100100
}
101101

102102
Logger *CoreServices::getLogger() {
103-
return logger;
103+
return Logger::getInstance();
104104
}
105105

106106
void CoreServices::installModule(PolycodeModule *module) {
@@ -122,7 +122,7 @@ void CoreServices::setupBasicListeners() {
122122
}
123123

124124
CoreServices::CoreServices() : EventDispatcher() {
125-
logger = new Logger();
125+
logger = Logger::getInstance();
126126
resourceManager = new ResourceManager();
127127
config = new Config();
128128
materialManager = new MaterialManager();

Core/Contents/Source/PolyLogger.cpp

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,17 @@
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

3234
using namespace Polycode;
3335

36+
Logger* Logger::overrideInstance = NULL;
37+
3438
LoggerEvent::LoggerEvent(String message) : Event() {
3539
this->message = message;
3640
}
@@ -41,11 +45,12 @@ LoggerEvent::~LoggerEvent() {
4145

4246

4347
Logger::Logger() : EventDispatcher() {
44-
48+
logToFile = false;
49+
logFile = fopen("poly.log", "w");
4550
}
4651

4752
Logger::~Logger() {
48-
53+
fclose(logFile);
4954
}
5055

5156
void 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

Comments
 (0)