Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "LoggerImpl.h"
00037
00038 #include <iostream>
00039 #include <fstream>
00040
00041 using namespace std;
00042
00043 namespace PointMatcherSupport
00044 {
00045 FileLogger::FileLogger(const Parameters& params):
00046 Logger("FileLogger", FileLogger::availableParameters(), params),
00047 infoFileName(Parametrizable::get<std::string>("infoFileName")),
00048 warningFileName(Parametrizable::get<std::string>("warningFileName")),
00049 displayLocation(Parametrizable::get<bool>("displayLocation")),
00050 _infoFileStream(infoFileName.c_str()),
00051 _warningFileStream(warningFileName.c_str()),
00052 _infoStream(nullptr),
00053 _warningStream(nullptr)
00054 {
00055 if (infoFileName.empty())
00056 {
00057 _infoStream.rdbuf(std::cout.rdbuf());
00058 }
00059 else
00060 {
00061 if (!_infoFileStream.good())
00062 {
00063 throw runtime_error(string("FileLogger::Cannot open info stream to file ") + infoFileName);
00064 }
00065 _infoStream.rdbuf(_infoFileStream.rdbuf());
00066 }
00067
00068 if (warningFileName.empty())
00069 {
00070 _warningStream.rdbuf(std::cerr.rdbuf());
00071 }
00072 else
00073 {
00074 if (!_warningFileStream.good())
00075 {
00076 throw runtime_error(string("FileLogger::Cannot open warning stream to file ") + warningFileName);
00077 }
00078 _warningStream.rdbuf(_warningFileStream.rdbuf());
00079 }
00080 }
00081
00082 bool FileLogger::hasInfoChannel() const
00083 {
00084 return true;
00085 };
00086
00087 void FileLogger::beginInfoEntry(const char *file, unsigned line, const char *func)
00088 {
00089 }
00090
00091 std::ostream* FileLogger::infoStream()
00092 {
00093 return &_infoStream;
00094 }
00095
00096 void FileLogger::finishInfoEntry(const char *file, unsigned line, const char *func)
00097 {
00098 if (displayLocation)
00099 _infoStream << " (at " << file << ":" << line << " in " << func << " )" << endl;
00100 else
00101 _infoStream << endl;
00102 }
00103
00104 bool FileLogger::hasWarningChannel() const
00105 {
00106 return true;
00107 }
00108
00109 void FileLogger::beginWarningEntry(const char *file, unsigned line, const char *func)
00110 {
00111 }
00112
00113 std::ostream* FileLogger::warningStream()
00114 {
00115 return &_warningStream;
00116 }
00117
00118 void FileLogger::finishWarningEntry(const char *file, unsigned line, const char *func)
00119 {
00120 if (displayLocation)
00121 _warningStream << " (at " << file << ":" << line << " in " << func << " )" << endl;
00122 else
00123 _warningStream << endl;
00124 }
00125 }