diff --git a/Analysis.cpp b/Analysis.cpp
index efb54341ee7810886c3e1764379eedd4e1f0dd97..748931aeea06199c2f7f1bb7cb9055551e6f99f9 100644
--- a/Analysis.cpp
+++ b/Analysis.cpp
@@ -119,27 +119,6 @@ void Analysis::InitArgs(ArgumentParser* args)
{
string s = "Parameter:\n";
- switch (args->GetLog()) {
- case 0:
- // no log file
- //Log = new OutputHandler();
- break;
- case 1:
- if(Log) delete Log;
- Log = new STDIOHandler();
- break;
- case 2: {
- char name[CLENGTH]="";
- sprintf(name,"%s.P0.dat",args->GetErrorLogFile().c_str());
- if(Log) delete Log;
- Log = new FileHandler(name);
- }
- break;
- default:
- Log->Write("Wrong option for Log file!");
- exit(0);
- }
-
if(args->GetIsMethodA()) {
_DoesUseMethodA = true;
vector<int> Measurement_Area_IDs = args->GetAreaIDforMethodA();
diff --git a/general/ArgumentParser.cpp b/general/ArgumentParser.cpp
index a363bbe2314a4579bc4b31d905462da731855d35..565e65a8828ac3e7c3484d22883fd4c2966db9df 100644
--- a/general/ArgumentParser.cpp
+++ b/general/ArgumentParser.cpp
@@ -53,6 +53,34 @@
using namespace std;
+/* https://stackoverflow.com/questions/38530981/output-compiler-version-in-a-c-program#38531037 */
+std::string ver_string(int a, int b, int c) {
+ std::ostringstream ss;
+ ss << a << '.' << b << '.' << c;
+ return ss.str();
+}
+
+ std::string true_cxx =
+#ifdef __clang__
+ "clang++";
+#else
+ "g++";
+#endif
+
+ std::string true_cxx_ver =
+#ifdef __clang__
+ ver_string(__clang_major__, __clang_minor__, __clang_patchlevel__);
+#else
+ ver_string(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
+#endif
+
+// todo: handle Visual Studio
+/* #ifdef _MSC_VER */
+/* std::to_string(_MSC_VER) */
+/* #endif */
+
+
+
void ArgumentParser::Usage(const std::string file)
{
@@ -83,8 +111,8 @@ ArgumentParser::ArgumentParser()
_steadyEnd = 1000;
_grid_size_X = 10;
_grid_size_Y = 10;
- _errorLogFile="./Logfile.dat";
- _log=1; //no output wanted
+ _errorLogFile="log.txt";
+ _log=2; //no output wanted
_trajectoriesLocation="./";
_trajectoriesFilename="";
_projectRootDir="./";
@@ -150,7 +178,14 @@ const string& ArgumentParser::GetProjectRootDir() const
bool ArgumentParser::ParseIniFile(const string& inifile)
{
-
+ // first logs will go to stdout
+ Log->Write("----\nJuPedSim - JPSreport\n");
+ Log->Write("Current date : %s %s", __DATE__, __TIME__);
+ Log->Write("Version : %s", JPSREPORT_VERSION);
+ Log->Write("Compiler : %s (%s)", true_cxx.c_str(), true_cxx_ver.c_str());
+ Log->Write("Commit hash : %s", GIT_COMMIT_HASH);
+ Log->Write("Commit date : %s", GIT_COMMIT_DATE);
+ Log->Write("Branch : %s\n----\n", GIT_BRANCH);
Log->Write("INFO: \tParsing the ini file <%s>",inifile.c_str());
//extract and set the project root dir
@@ -179,6 +214,45 @@ bool ArgumentParser::ParseIniFile(const string& inifile)
return false;
}
+ if (xMainNode->FirstChild("logfile")) {
+ this->SetErrorLogFile(
+ this->GetProjectRootDir()+xMainNode->FirstChild("logfile")->FirstChild()->Value());
+ this->SetLog(2);
+ Log->Write("INFO:\tlogfile <%s>", this->GetErrorLogFile().c_str());
+ }
+ switch (this->GetLog()) {
+ case 0:
+ // no log file
+ //Log = new OutputHandler();
+ break;
+ case 1:
+ if(Log) delete Log;
+ Log = new STDIOHandler();
+ break;
+ case 2: {
+ char name[CLENGTH]="";
+ sprintf(name,"%s", this->GetErrorLogFile().c_str());
+ if(Log) delete Log;
+ Log = new FileHandler(name);
+ }
+ break;
+ default:
+ Log->Write("ERROR: \tWrong option for Log file!");
+ exit(0);
+ }
+ // from this point if case 2, the logs will go to a logfile
+ if(this->GetLog() == 2)
+ {
+ Log->Write("----\nJuPedSim - JPSreport\n");
+ Log->Write("Current date : %s %s", __DATE__, __TIME__);
+ Log->Write("Version : %s", JPSREPORT_VERSION);
+ Log->Write("Compiler : %s (%s)", true_cxx.c_str(), true_cxx_ver.c_str());
+ Log->Write("Commit hash : %s", GIT_COMMIT_HASH);
+ Log->Write("Commit date : %s", GIT_COMMIT_DATE);
+ Log->Write("Branch : %s\n----\n", GIT_BRANCH);
+ }
+
+
//geometry
if(xMainNode->FirstChild("geometry"))
{
@@ -975,3 +1049,12 @@ MeasurementArea* ArgumentParser::GetMeasurementArea(int id)
return _measurementAreas[id];
}
+
+void ArgumentParser::SetErrorLogFile(std::string errorLogFile)
+{
+ _errorLogFile = errorLogFile;
+};
+
+void ArgumentParser::SetLog(int log) {
+ _log = log;
+};
diff --git a/general/ArgumentParser.h b/general/ArgumentParser.h
index d9e273875a6f59a7242758c43c942d46cf582103..3a5df0f53dbafe1be6052a1dfc1b99916a9d46d1 100644
--- a/general/ArgumentParser.h
+++ b/general/ArgumentParser.h
@@ -151,7 +151,8 @@ public:
float GetGridSizeY() const;
int GetLog() const;
bool ParseArgs(int argc, char **argv);
-
+ void SetErrorLogFile(std::string errorLogFile);
+ void SetLog(int log);
MeasurementArea* GetMeasurementArea(int id);
/**
diff --git a/main.cpp b/main.cpp
index 1a16d5130c4a83ca5fd40a8a5f5bbbda15e35aad..06a0855ce8f991fcb99abf1e6d8dcfc910016b1b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -34,44 +34,10 @@
#include "Analysis.h"
using namespace std;
-/* https://stackoverflow.com/questions/38530981/output-compiler-version-in-a-c-program#38531037 */
-std::string ver_string(int a, int b, int c) {
- std::ostringstream ss;
- ss << a << '.' << b << '.' << c;
- return ss.str();
-}
-
- std::string true_cxx =
-#ifdef __clang__
- "clang++";
-#else
- "g++";
-#endif
-
- std::string true_cxx_ver =
-#ifdef __clang__
- ver_string(__clang_major__, __clang_minor__, __clang_patchlevel__);
-#else
- ver_string(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
-#endif
-
-// todo: handle Visual Studio
-/* #ifdef _MSC_VER */
-/* std::to_string(_MSC_VER) */
-/* #endif */
-
int main(int argc, char **argv)
{
Log = new STDIOHandler();
- Log->Write("----\nJuPedSim - JPSreport\n");
- Log->Write("Current date : %s %s", __DATE__, __TIME__);
- Log->Write("Version : %s", JPSREPORT_VERSION);
- Log->Write("Compiler : %s (%s)", true_cxx.c_str(), true_cxx_ver.c_str());
- Log->Write("Commit hash : %s", GIT_COMMIT_HASH);
- Log->Write("Commit date : %s", GIT_COMMIT_DATE);
- // Log->Write("Commit subject : %s", GIT_COMMIT_SUBJECT);
- Log->Write("Branch : %s\n----\n", GIT_BRANCH);
// Parsing the arguments
ArgumentParser* args = new ArgumentParser();
@@ -81,8 +47,6 @@ int main(int argc, char **argv)
// get the number of file to analyse
const vector<string>& files = args->GetTrajectoriesFiles();
const string& path = args->GetTrajectoriesLocation();
- //path="";
-
// create and initialize the analysis engine
for (unsigned int i = 0; i < files.size(); i++)
{