mirror of
https://github.com/CrowCpp/Crow.git
synced 2026-01-18 16:31:17 +01:00
for log handler a string reference is sufficient, inside the log handler used string.append instead of + operator
This commit is contained in:
@@ -35,13 +35,13 @@ Writing a log is as simple as `#!cpp CROW_LOG_<LOG LEVEL> << "Hello";` (replace&
|
||||
|
||||
|
||||
Assuming you have an existing logger or Crow's default format just doesn't work for you. Crow allows you to use a custom logger for any log made using the `CROW_LOG_<LOG LEVEL>` macro.<br>
|
||||
All you need is a class extending `#!cpp crow::ILogHandler` containing the method `#!cpp void log(std::string, crow::LogLevel)`.<br>
|
||||
All you need is a class extending `#!cpp crow::ILogHandler` containing the method `#!cpp void log(const std::string&, crow::LogLevel)`.<br>
|
||||
Once you have your custom logger, you need to set it via `#!cpp crow::logger::setHandler(&MyLogger);`. Here's a full example:<br>
|
||||
```cpp
|
||||
class CustomLogger : public crow::ILogHandler {
|
||||
public:
|
||||
CustomLogger() {}
|
||||
void log(std::string message, crow::LogLevel /*level*/) {
|
||||
void log(const std::string& message, crow::LogLevel /*level*/) {
|
||||
// "message" doesn't contain the timestamp and loglevel
|
||||
// prefix the default logger does and it doesn't end
|
||||
// in a newline.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class ExampleLogHandler : public crow::ILogHandler
|
||||
{
|
||||
public:
|
||||
void log(std::string /*message*/, crow::LogLevel /*level*/) override
|
||||
void log(const std::string& /*message*/, crow::LogLevel /*level*/) override
|
||||
{
|
||||
// cerr << "ExampleLogHandler -> " << message;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class ExampleLogHandler : public crow::ILogHandler
|
||||
{
|
||||
public:
|
||||
void log(std::string message, crow::LogLevel level) override
|
||||
void log(const std::string & message, crow::LogLevel level) override
|
||||
{
|
||||
// cerr << "ExampleLogHandler -> " << message;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class ExampleLogHandler : public crow::ILogHandler
|
||||
{
|
||||
public:
|
||||
void log(std::string /*message*/, crow::LogLevel /*level*/) override
|
||||
void log(const std::string& /*message*/, crow::LogLevel /*level*/) override
|
||||
{
|
||||
// cerr << "ExampleLogHandler -> " << message;
|
||||
}
|
||||
|
||||
@@ -35,34 +35,44 @@ namespace crow
|
||||
public:
|
||||
virtual ~ILogHandler() = default;
|
||||
|
||||
virtual void log(std::string message, LogLevel level) = 0;
|
||||
virtual void log(const std::string& message, LogLevel level) = 0;
|
||||
};
|
||||
|
||||
class CerrLogHandler : public ILogHandler
|
||||
{
|
||||
public:
|
||||
void log(std::string message, LogLevel level) override
|
||||
void log(const std::string &message, LogLevel level) override
|
||||
{
|
||||
std::string prefix;
|
||||
std::string log_msg;
|
||||
log_msg.reserve(message.length() + 1+32+3+8+2);
|
||||
log_msg
|
||||
.append("(")
|
||||
.append(timestamp())
|
||||
.append(") [");
|
||||
|
||||
switch (level)
|
||||
{
|
||||
case LogLevel::Debug:
|
||||
prefix = "DEBUG ";
|
||||
log_msg.append("DEBUG ");
|
||||
break;
|
||||
case LogLevel::Info:
|
||||
prefix = "INFO ";
|
||||
log_msg.append("INFO ");
|
||||
break;
|
||||
case LogLevel::Warning:
|
||||
prefix = "WARNING ";
|
||||
log_msg.append("WARNING ");
|
||||
break;
|
||||
case LogLevel::Error:
|
||||
prefix = "ERROR ";
|
||||
log_msg.append("ERROR ");
|
||||
break;
|
||||
case LogLevel::Critical:
|
||||
prefix = "CRITICAL";
|
||||
log_msg.append("CRITICAL");
|
||||
break;
|
||||
}
|
||||
std::cerr << std::string("(") + timestamp() + std::string(") [") + prefix + std::string("] ") + message << std::endl;
|
||||
|
||||
log_msg.append("] ")
|
||||
.append(message);
|
||||
|
||||
std::cerr << log_msg << std::endl;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user