ddnet/src/engine/server/server_logger.cpp
heinrich5991 85566fbe92 Add separate log levels for each output
`stdout_output_level` for printing to stdout, `console_output_level` for
printing to local console and remote console and `loglevel` for the log
file.

Keep the old log level filters 0 for info and more severe, 1 for debug
and more severe and 2 for trace and more severe, introducing -1 for
warn, and -2 for error. -3 will show no log messages at all.
2023-07-24 22:43:05 +02:00

48 lines
935 B
C++

#include "server_logger.h"
#include "server.h"
CServerLogger::CServerLogger(CServer *pServer) :
m_pServer(pServer),
m_MainThread(std::this_thread::get_id())
{
dbg_assert(pServer != nullptr, "server pointer must not be null");
}
void CServerLogger::Log(const CLogMessage *pMessage)
{
if(m_Filter.Filters(pMessage))
{
return;
}
m_PendingLock.lock();
if(m_MainThread == std::this_thread::get_id())
{
if(!m_vPending.empty())
{
if(m_pServer)
{
for(const auto &Message : m_vPending)
{
m_pServer->SendLogLine(&Message);
}
}
m_vPending.clear();
}
m_PendingLock.unlock();
if(m_pServer)
m_pServer->SendLogLine(pMessage);
}
else
{
m_vPending.push_back(*pMessage);
m_PendingLock.unlock();
}
}
void CServerLogger::OnServerDeletion()
{
dbg_assert(m_MainThread == std::this_thread::get_id(), "CServerLogger::OnServerDeletion not called from the main thread");
m_pServer = nullptr;
}