Skip to content

Commit d3038b6

Browse files
committed
for log handler a string reference is sufficient, inside the log handler used string.append instead of + operator
1 parent bfbde38 commit d3038b6

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

docs/guides/logging.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ Writing a log is as simple as `#!cpp CROW_LOG_<LOG LEVEL> << "Hello";` (replace&
3535

3636

3737
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>
38-
All you need is a class extending `#!cpp crow::ILogHandler` containing the method `#!cpp void log(std::string, crow::LogLevel)`.<br>
38+
All you need is a class extending `#!cpp crow::ILogHandler` containing the method `#!cpp void log(const std::string&, crow::LogLevel)`.<br>
3939
Once you have your custom logger, you need to set it via `#!cpp crow::logger::setHandler(&MyLogger);`. Here's a full example:<br>
4040
```cpp
4141
class CustomLogger : public crow::ILogHandler {
4242
public:
4343
CustomLogger() {}
44-
void log(std::string message, crow::LogLevel /*level*/) {
44+
void log(const std::string& message, crow::LogLevel /*level*/) {
4545
// "message" doesn't contain the timestamp and loglevel
4646
// prefix the default logger does and it doesn't end
4747
// in a newline.

examples/example.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ExampleLogHandler : public crow::ILogHandler
44
{
55
public:
6-
void log(std::string /*message*/, crow::LogLevel /*level*/) override
6+
void log(const std::string& /*message*/, crow::LogLevel /*level*/) override
77
{
88
// cerr << "ExampleLogHandler -> " << message;
99
}

examples/example_vs.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ExampleLogHandler : public crow::ILogHandler
44
{
55
public:
6-
void log(std::string message, crow::LogLevel level) override
6+
void log(const std::string & message, crow::LogLevel level) override
77
{
88
// cerr << "ExampleLogHandler -> " << message;
99
}

examples/example_with_all.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class ExampleLogHandler : public crow::ILogHandler
44
{
55
public:
6-
void log(std::string /*message*/, crow::LogLevel /*level*/) override
6+
void log(const std::string& /*message*/, crow::LogLevel /*level*/) override
77
{
88
// cerr << "ExampleLogHandler -> " << message;
99
}

include/crow/logging.h

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,34 +35,44 @@ namespace crow
3535
public:
3636
virtual ~ILogHandler() = default;
3737

38-
virtual void log(std::string message, LogLevel level) = 0;
38+
virtual void log(const std::string& message, LogLevel level) = 0;
3939
};
4040

4141
class CerrLogHandler : public ILogHandler
4242
{
4343
public:
44-
void log(std::string message, LogLevel level) override
44+
void log(const std::string &message, LogLevel level) override
4545
{
46-
std::string prefix;
46+
std::string log_msg;
47+
log_msg.reserve(message.length() + 1+32+3+8+2);
48+
log_msg
49+
.append("(")
50+
.append(timestamp())
51+
.append(") [");
52+
4753
switch (level)
4854
{
4955
case LogLevel::Debug:
50-
prefix = "DEBUG ";
56+
log_msg.append("DEBUG ");
5157
break;
5258
case LogLevel::Info:
53-
prefix = "INFO ";
59+
log_msg.append("INFO ");
5460
break;
5561
case LogLevel::Warning:
56-
prefix = "WARNING ";
62+
log_msg.append("WARNING ");
5763
break;
5864
case LogLevel::Error:
59-
prefix = "ERROR ";
65+
log_msg.append("ERROR ");
6066
break;
6167
case LogLevel::Critical:
62-
prefix = "CRITICAL";
68+
log_msg.append("CRITICAL");
6369
break;
6470
}
65-
std::cerr << std::string("(") + timestamp() + std::string(") [") + prefix + std::string("] ") + message << std::endl;
71+
72+
log_msg.append("] ")
73+
.append(message);
74+
75+
std::cerr << log_msg << std::endl;
6676
}
6777

6878
private:

0 commit comments

Comments
 (0)