mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Small logging refactor and additional options
-> Get rid of Logger::logToSystem and use normal downstream output system for android instead -> Give the downstream output system more information: enrich the log function of ILogOutput with information and add ICombinedLogOutput for easier use. -> Make Logger::getLevelLabel() static and public so that it can be used by downstream log output. -> Add g_ and m_ prefixes where required
This commit is contained in:
parent
6f2d9de769
commit
2f19abd704
2 changed files with 92 additions and 60 deletions
63
src/log.h
63
src/log.h
|
@ -57,12 +57,14 @@ public:
|
|||
bool getTraceEnabled() { return m_trace_enabled; }
|
||||
|
||||
static LogLevel stringToLevel(const std::string &name);
|
||||
static const std::string getLevelLabel(LogLevel lev);
|
||||
|
||||
private:
|
||||
void logToSystem(LogLevel, const std::string &text);
|
||||
void logToOutputs(LogLevel, const std::string &text);
|
||||
void logToOutputsRaw(LogLevel, const std::string &line);
|
||||
void logToOutputs(LogLevel, const std::string &combined,
|
||||
const std::string &time, const std::string &thread_name,
|
||||
const std::string &payload_text);
|
||||
|
||||
const std::string getLevelLabel(LogLevel lev);
|
||||
const std::string getThreadName();
|
||||
|
||||
std::vector<ILogOutput *> m_outputs[LL_MAX];
|
||||
|
@ -78,73 +80,86 @@ private:
|
|||
|
||||
class ILogOutput {
|
||||
public:
|
||||
virtual void log(const std::string &line) = 0;
|
||||
virtual void logRaw(LogLevel, const std::string &line) = 0;
|
||||
virtual void log(LogLevel, const std::string &combined,
|
||||
const std::string &time, const std::string &thread_name,
|
||||
const std::string &payload_text) = 0;
|
||||
};
|
||||
|
||||
class StreamLogOutput : public ILogOutput {
|
||||
class ICombinedLogOutput : public ILogOutput {
|
||||
public:
|
||||
void log(LogLevel lev, const std::string &combined,
|
||||
const std::string &time, const std::string &thread_name,
|
||||
const std::string &payload_text)
|
||||
{
|
||||
logRaw(lev, combined);
|
||||
}
|
||||
};
|
||||
|
||||
class StreamLogOutput : public ICombinedLogOutput {
|
||||
public:
|
||||
StreamLogOutput(std::ostream &stream) :
|
||||
stream(stream)
|
||||
m_stream(stream)
|
||||
{
|
||||
}
|
||||
|
||||
void log(const std::string &line)
|
||||
void logRaw(LogLevel lev, const std::string &line)
|
||||
{
|
||||
stream << line << std::endl;
|
||||
m_stream << line << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
std::ostream &stream;
|
||||
std::ostream &m_stream;
|
||||
};
|
||||
|
||||
class FileLogOutput : public ILogOutput {
|
||||
class FileLogOutput : public ICombinedLogOutput {
|
||||
public:
|
||||
void open(const std::string &filename);
|
||||
|
||||
void log(const std::string &line)
|
||||
void logRaw(LogLevel lev, const std::string &line)
|
||||
{
|
||||
stream << line << std::endl;
|
||||
m_stream << line << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
std::ofstream stream;
|
||||
std::ofstream m_stream;
|
||||
};
|
||||
|
||||
class LogOutputBuffer : public ILogOutput {
|
||||
class LogOutputBuffer : public ICombinedLogOutput {
|
||||
public:
|
||||
LogOutputBuffer(Logger &logger, LogLevel lev) :
|
||||
logger(logger)
|
||||
m_logger(logger)
|
||||
{
|
||||
logger.addOutput(this, lev);
|
||||
m_logger.addOutput(this, lev);
|
||||
}
|
||||
|
||||
~LogOutputBuffer()
|
||||
{
|
||||
logger.removeOutput(this);
|
||||
m_logger.removeOutput(this);
|
||||
}
|
||||
|
||||
virtual void log(const std::string &line)
|
||||
void logRaw(LogLevel lev, const std::string &line)
|
||||
{
|
||||
buffer.push(line);
|
||||
m_buffer.push(line);
|
||||
}
|
||||
|
||||
bool empty()
|
||||
{
|
||||
return buffer.empty();
|
||||
return m_buffer.empty();
|
||||
}
|
||||
|
||||
std::string get()
|
||||
{
|
||||
if (empty())
|
||||
return "";
|
||||
std::string s = buffer.front();
|
||||
buffer.pop();
|
||||
std::string s = m_buffer.front();
|
||||
m_buffer.pop();
|
||||
return s;
|
||||
}
|
||||
|
||||
private:
|
||||
std::queue<std::string> buffer;
|
||||
Logger &logger;
|
||||
std::queue<std::string> m_buffer;
|
||||
Logger &m_logger;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue