* @brief A very simple logging class.
*/
-#include <time.h>
-#include <cstdio>
#include "log.h"
#include "cross.h"
#include "config.h"
#include "safe_stringstream.h"
+#include <time.h>
+#include <cstdio>
#include "i18n.h"
using namespace std;
-int const Log::TYPE_GENERAL = 0x1;
-int const Log::TYPE_WARNING = 0x2;
-int const Log::TYPE_ERROR = 0x4;
-int const Log::TYPE_TIMING = 0x8;
+int const Log::TYPE_GENERAL = 0x1;
+int const Log::TYPE_WARNING = 0x2;
+int const Log::TYPE_ERROR = 0x4;
+int const Log::TYPE_DEBUG_DECODE = 0x8;
+int const Log::TYPE_DEBUG_ENCODE = 0x10;
+int const Log::TYPE_TIMING = 0x20;
Log::Log ()
: _types (0)
if (type & TYPE_WARNING) {
s << "WARNING: ";
}
-
+
s << message;
do_log (s.str ());
}
SafeStringStream s;
s << tv.tv_sec << N_(":") << tv.tv_usec << N_(" ") << m;
do_log (s.str ());
-}
+}
+
+void
+Log::dcp_log (dcp::NoteType type, string m)
+{
+ switch (type) {
+ case dcp::DCP_PROGRESS:
+ log (m, TYPE_GENERAL);
+ break;
+ case dcp::DCP_ERROR:
+ log (m, TYPE_ERROR);
+ break;
+ case dcp::DCP_NOTE:
+ log (m, TYPE_WARNING);
+ break;
+ }
+}
void
Log::set_types (int t)
}
string
-FileLog::head_and_tail () const
+FileLog::head_and_tail (int amount) const
{
boost::mutex::scoped_lock lm (_mutex);
- uintmax_t head_amount = 1024;
- uintmax_t tail_amount = 1024;
+ uintmax_t head_amount = amount;
+ uintmax_t tail_amount = amount;
uintmax_t size = boost::filesystem::file_size (_file);
if (size < (head_amount + tail_amount)) {
head_amount = size;
tail_amount = 0;
}
-
+
FILE* f = fopen_boost (_file, "r");
if (!f) {
return "";
string out;
char* buffer = new char[max(head_amount, tail_amount) + 1];
-
+
int N = fread (buffer, 1, head_amount, f);
buffer[N] = '\0';
- out += buffer;
+ out += string (buffer);
- fseek (f, tail_amount, SEEK_END);
-
- N = fread (buffer, 1, tail_amount, f);
- buffer[N] = '\0';
- out += buffer;
+ if (tail_amount > 0) {
+ out += "\n .\n .\n .\n";
- delete[] buffer;
+ fseek (f, - tail_amount - 1, SEEK_END);
+
+ N = fread (buffer, 1, tail_amount, f);
+ buffer[N] = '\0';
+ out += string (buffer) + "\n";
+ }
+ delete[] buffer;
fclose (f);
return out;