Cogs.Core
FileLogger.cpp
1#include "FileLogger.h"
2#include "LogManager.h"
3
4#include <cstdio>
5#include <cstring>
6
7Cogs::Logging::FileLogger::~FileLogger() {
8 cleanUp();
9}
10
12 static FileLogger i;
13
14 return i;
15}
16
17void Cogs::Logging::FileLogger::initialize(const char* path) {
18 cleanUp();
19
20 LockGuard lock(mutex);
21
22 outputFile = std::fopen(path, "w");
23}
24
25void Cogs::Logging::FileLogger::cleanUp() {
26 LockGuard lock(mutex);
27
28 if (outputFile) {
29 std::fclose(outputFile);
30 outputFile = nullptr;
31 }
32}
33
34void Cogs::Logging::FileLogger::consumeMessage(const char* source, Category category, uint32_t /*errorNumber*/, const char* message, const char* filename, int lineNumber) {
35 LockGuard lock(mutex);
36
37 if (outputFile) {
38 if (outputFilenames && filename && filename[0] != '\0') {
39 std::fprintf(outputFile, "[%s][%s] %s (%s:%d)\n", getCategoryName(category), source, message, filename, lineNumber);
40 }
41 else {
42 std::fprintf(outputFile, "[%s][%s] %s\n", getCategoryName(category), source, message);
43 }
44 if (category >= Category::Error) {
45 std::fflush(outputFile);
46 }
47 }
48}
static FileLogger & instance()
Retrieve the global fileLogger instance.
Definition: FileLogger.cpp:11
Category
Logging categories used to filter log messages.
Definition: LogManager.h:31