mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
- Added stream-like logging - Schema refactoring
This commit is contained in:
parent
fc41d24164
commit
de01ea54b0
@ -4,6 +4,12 @@
|
|||||||
"type" : "object",
|
"type" : "object",
|
||||||
"$schema": "http://json-schema.org/draft-04/schema",
|
"$schema": "http://json-schema.org/draft-04/schema",
|
||||||
"required" : [ "general", "video", "adventure", "battle", "server", "logging" ],
|
"required" : [ "general", "video", "adventure", "battle", "server", "logging" ],
|
||||||
|
"definitions" : {
|
||||||
|
"logLevelEnum" : {
|
||||||
|
"type" : "string",
|
||||||
|
"enum" : [ "trace", "debug", "info", "warn", "error" ]
|
||||||
|
}
|
||||||
|
},
|
||||||
"properties":
|
"properties":
|
||||||
{
|
{
|
||||||
"general" : {
|
"general" : {
|
||||||
@ -146,9 +152,8 @@
|
|||||||
"default" : "%l %n [%t] - %m"
|
"default" : "%l %n [%t] - %m"
|
||||||
},
|
},
|
||||||
"threshold" : {
|
"threshold" : {
|
||||||
"type" : "string",
|
"$ref" : "#/definitions/logLevelEnum",
|
||||||
"default" : "info",
|
"default" : "info",
|
||||||
"enum" : [ "trace", "debug", "info", "warn", "error" ]
|
|
||||||
},
|
},
|
||||||
"coloredOutputEnabled" : {
|
"coloredOutputEnabled" : {
|
||||||
"type" : "boolean",
|
"type" : "boolean",
|
||||||
@ -168,7 +173,7 @@
|
|||||||
"required" : [ "domain", "level", "color" ],
|
"required" : [ "domain", "level", "color" ],
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"domain" : { "type" : "string" },
|
"domain" : { "type" : "string" },
|
||||||
"level" : { "type" : "string", "enum" : [ "trace", "debug", "info", "warn", "error" ] },
|
"level" : { "$ref" : "#/definitions/logLevelEnum" },
|
||||||
"color" : { "type" : "string", "enum" : [ "default", "green", "red", "magenta", "yellow", "white", "gray", "teal" ] }
|
"color" : { "type" : "string", "enum" : [ "default", "green", "red", "magenta", "yellow", "white", "gray", "teal" ] }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -191,8 +196,7 @@
|
|||||||
"required" : [ "level" ],
|
"required" : [ "level" ],
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"level" : {
|
"level" : {
|
||||||
"type" : "string",
|
"$ref" : "#/definitions/logLevelEnum"
|
||||||
"enum" : [ "trace", "debug", "info", "warn", "error" ]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,26 +84,51 @@ void CGLogger::trace(const std::string & message) const
|
|||||||
log(ELogLevel::TRACE, message);
|
log(ELogLevel::TRACE, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream CGLogger::traceStream() const
|
||||||
|
{
|
||||||
|
return CLoggerStream(*this, ELogLevel::TRACE);
|
||||||
|
}
|
||||||
|
|
||||||
void CGLogger::debug(const std::string & message) const
|
void CGLogger::debug(const std::string & message) const
|
||||||
{
|
{
|
||||||
log(ELogLevel::DEBUG, message);
|
log(ELogLevel::DEBUG, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream CGLogger::debugStream() const
|
||||||
|
{
|
||||||
|
return CLoggerStream(*this, ELogLevel::DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
void CGLogger::info(const std::string & message) const
|
void CGLogger::info(const std::string & message) const
|
||||||
{
|
{
|
||||||
log(ELogLevel::INFO, message);
|
log(ELogLevel::INFO, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream CGLogger::infoStream() const
|
||||||
|
{
|
||||||
|
return CLoggerStream(*this, ELogLevel::INFO);
|
||||||
|
}
|
||||||
|
|
||||||
void CGLogger::warn(const std::string & message) const
|
void CGLogger::warn(const std::string & message) const
|
||||||
{
|
{
|
||||||
log(ELogLevel::WARN, message);
|
log(ELogLevel::WARN, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream CGLogger::warnStream() const
|
||||||
|
{
|
||||||
|
return CLoggerStream(*this, ELogLevel::WARN);
|
||||||
|
}
|
||||||
|
|
||||||
void CGLogger::error(const std::string & message) const
|
void CGLogger::error(const std::string & message) const
|
||||||
{
|
{
|
||||||
log(ELogLevel::ERROR, message);
|
log(ELogLevel::ERROR, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream CGLogger::errorStream() const
|
||||||
|
{
|
||||||
|
return CLoggerStream(*this, ELogLevel::ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
void CGLogger::log(ELogLevel::ELogLevel level, const std::string & message) const
|
void CGLogger::log(ELogLevel::ELogLevel level, const std::string & message) const
|
||||||
{
|
{
|
||||||
if(getEffectiveLevel() <= level)
|
if(getEffectiveLevel() <= level)
|
||||||
@ -163,3 +188,18 @@ void CGLogger::callTargets(const LogRecord & record) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLoggerStream::CLoggerStream(const CGLogger & logger, ELogLevel::ELogLevel level) : logger(logger), level(level), sbuffer(nullptr)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CLoggerStream::~CLoggerStream()
|
||||||
|
{
|
||||||
|
if(sbuffer)
|
||||||
|
{
|
||||||
|
logger.log(level, sbuffer->str());
|
||||||
|
delete sbuffer;
|
||||||
|
sbuffer = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -73,6 +73,31 @@ private:
|
|||||||
std::string name;
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CGLogger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The logger stream provides a stream-like way of logging messages.
|
||||||
|
*/
|
||||||
|
class DLL_LINKAGE CLoggerStream
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CLoggerStream(const CGLogger & logger, ELogLevel::ELogLevel level);
|
||||||
|
~CLoggerStream();
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
CLoggerStream & operator<<(const T & data)
|
||||||
|
{
|
||||||
|
if(!sbuffer) sbuffer = new std::stringstream();
|
||||||
|
(*sbuffer) << data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const CGLogger & logger;
|
||||||
|
ELogLevel::ELogLevel level;
|
||||||
|
std::stringstream * sbuffer;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The logger is used to log messages to certain targets of a specific domain/name. Temporary name is
|
* The logger is used to log messages to certain targets of a specific domain/name. Temporary name is
|
||||||
* CGLogger, should be renamed to CLogger after refactoring.
|
* CGLogger, should be renamed to CLogger after refactoring.
|
||||||
@ -102,6 +127,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void trace(const std::string & message) const;
|
void trace(const std::string & message) const;
|
||||||
|
|
||||||
|
CLoggerStream traceStream() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs a message with the debug level.
|
* Logs a message with the debug level.
|
||||||
*
|
*
|
||||||
@ -109,6 +136,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void debug(const std::string & message) const;
|
void debug(const std::string & message) const;
|
||||||
|
|
||||||
|
CLoggerStream debugStream() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs a message with the info level.
|
* Logs a message with the info level.
|
||||||
*
|
*
|
||||||
@ -116,6 +145,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void info(const std::string & message) const;
|
void info(const std::string & message) const;
|
||||||
|
|
||||||
|
CLoggerStream infoStream() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs a message with the warn level.
|
* Logs a message with the warn level.
|
||||||
*
|
*
|
||||||
@ -123,6 +154,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
void warn(const std::string & message) const;
|
void warn(const std::string & message) const;
|
||||||
|
|
||||||
|
CLoggerStream warnStream() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs a message with the error level.
|
* Logs a message with the error level.
|
||||||
*
|
*
|
||||||
@ -130,6 +163,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
void error(const std::string & message) const;
|
void error(const std::string & message) const;
|
||||||
|
|
||||||
|
CLoggerStream errorStream() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs a message of the given log level.
|
||||||
|
*
|
||||||
|
* @param level The log level of the message to log.
|
||||||
|
* @param message The message to log.
|
||||||
|
*/
|
||||||
|
inline void log(ELogLevel::ELogLevel level, const std::string & message) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the log level applied for this logger. The default level for the root logger is INFO.
|
* Gets the log level applied for this logger. The default level for the root logger is INFO.
|
||||||
*
|
*
|
||||||
@ -179,14 +222,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
CGLogger * getParent() const;
|
CGLogger * getParent() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs a message of the given log level.
|
|
||||||
*
|
|
||||||
* @param level The log level of the message to log.
|
|
||||||
* @param message The message to log.
|
|
||||||
*/
|
|
||||||
inline void log(ELogLevel::ELogLevel level, const std::string & message) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the effective log level.
|
* Gets the effective log level.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user