parent
f3973a5ff5
commit
00a0b84aac
35
src/log.cpp
35
src/log.cpp
|
@ -29,8 +29,8 @@ int logLevel=LOGLEVEL_INFO;
|
||||||
|
|
||||||
FILE* logFile;
|
FILE* logFile;
|
||||||
char* logFileBuf;
|
char* logFileBuf;
|
||||||
unsigned int logFilePosI=0;
|
std::atomic<unsigned int> logFilePosI;
|
||||||
unsigned int logFilePosO=0;
|
std::atomic<unsigned int> logFilePosO;
|
||||||
std::thread* logFileThread;
|
std::thread* logFileThread;
|
||||||
std::mutex logFileLock;
|
std::mutex logFileLock;
|
||||||
std::mutex logFileLockI;
|
std::mutex logFileLockI;
|
||||||
|
@ -52,11 +52,22 @@ const char* logTypes[5]={
|
||||||
"trace"
|
"trace"
|
||||||
};
|
};
|
||||||
|
|
||||||
void appendLogBuf(const char* msg, size_t len) {
|
void appendLogBuf(const LogEntry& entry) {
|
||||||
logFileLockI.lock();
|
logFileLockI.lock();
|
||||||
|
|
||||||
int remaining=logFilePosO-logFilePosI;
|
std::string toWrite=fmt::sprintf(
|
||||||
if (remaining<=0) remaining+=TA_LOGFILE_BUF_SIZE;
|
"%02d:%02d:%02d [%s] %s\n",
|
||||||
|
entry.time.tm_hour,
|
||||||
|
entry.time.tm_min,
|
||||||
|
entry.time.tm_sec,
|
||||||
|
logTypes[entry.loglevel],
|
||||||
|
entry.text
|
||||||
|
);
|
||||||
|
|
||||||
|
const char* msg=toWrite.c_str();
|
||||||
|
size_t len=toWrite.size();
|
||||||
|
|
||||||
|
int remaining=(logFilePosO-logFilePosI)&TA_LOGFILE_BUF_SIZE;
|
||||||
|
|
||||||
if (len>=(unsigned int)remaining) {
|
if (len>=(unsigned int)remaining) {
|
||||||
printf("line too long to fit in log buffer!\n");
|
printf("line too long to fit in log buffer!\n");
|
||||||
|
@ -101,15 +112,7 @@ int writeLog(int level, const char* msg, fmt::printf_args args) {
|
||||||
|
|
||||||
// write to log file
|
// write to log file
|
||||||
if (logFileAvail) {
|
if (logFileAvail) {
|
||||||
std::string toWrite=fmt::sprintf(
|
appendLogBuf(logEntries[pos]);
|
||||||
"%02d:%02d:%02d [%s] %s\n",
|
|
||||||
logEntries[pos].time.tm_hour,
|
|
||||||
logEntries[pos].time.tm_min,
|
|
||||||
logEntries[pos].time.tm_sec,
|
|
||||||
logTypes[logEntries[pos].loglevel],
|
|
||||||
logEntries[pos].text
|
|
||||||
);
|
|
||||||
appendLogBuf(toWrite.c_str(),toWrite.size());
|
|
||||||
logFileNotify.notify_one();
|
logFileNotify.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +154,7 @@ void _logFileThread() {
|
||||||
logFilePosO=0;
|
logFilePosO=0;
|
||||||
} else {
|
} else {
|
||||||
fwrite(logFileBuf+logFilePosO,1,logFilePosICopy-logFilePosO,logFile);
|
fwrite(logFileBuf+logFilePosO,1,logFilePosICopy-logFilePosO,logFile);
|
||||||
logFilePosO=logFilePosICopy;
|
logFilePosO=logFilePosICopy&TA_LOGFILE_BUF_MASK;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// wait
|
// wait
|
||||||
|
@ -165,7 +168,6 @@ void _logFileThread() {
|
||||||
bool startLogFile(const char* path) {
|
bool startLogFile(const char* path) {
|
||||||
logFileAvail=false;
|
logFileAvail=false;
|
||||||
return false;
|
return false;
|
||||||
/*
|
|
||||||
if (logFileAvail) return true;
|
if (logFileAvail) return true;
|
||||||
|
|
||||||
// rotate log file if possible
|
// rotate log file if possible
|
||||||
|
@ -184,7 +186,6 @@ bool startLogFile(const char* path) {
|
||||||
|
|
||||||
logFileThread=new std::thread(_logFileThread);
|
logFileThread=new std::thread(_logFileThread);
|
||||||
return true;
|
return true;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool finishLogFile() {
|
bool finishLogFile() {
|
||||||
|
|
Loading…
Reference in a new issue