for log handler a string reference is sufficient, inside the log handler used string.append instead of + operator

This commit is contained in:
Gulliver
2025-06-28 13:08:51 +02:00
committed by gittiver
parent bfbde38aeb
commit d3038b6ac8
5 changed files with 24 additions and 14 deletions

View File

@@ -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.

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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: