less mallocs for logging

This commit is contained in:
folkert van heusden 2024-04-28 10:13:55 +02:00
parent 209f8f1e88
commit dbc8aa220d
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1
2 changed files with 21 additions and 15 deletions

28
log.cpp
View file

@ -29,6 +29,8 @@ FILE *lfh = nullptr;
static int lf_uid = -1;
static int lf_gid = -1;
static bool l_timestamp = true;
static int log_buffer_size = 128;
static char *log_buffer = reinterpret_cast<char *>(malloc(log_buffer_size));
#if defined(ESP32)
int gettid()
@ -121,13 +123,19 @@ void dolog(const log_level_t ll, const char *fmt, ...)
#endif
}
char *str = nullptr;
for(;;) {
va_list ap;
va_start(ap, fmt);
(void)vasprintf(&str, fmt, ap);
int needed_length = vsnprintf(log_buffer, log_buffer_size, fmt, ap);
va_end(ap);
if (needed_length < log_buffer_size)
break;
log_buffer_size *= 2;
log_buffer = reinterpret_cast<char *>(realloc(log_buffer, log_buffer_size));
}
if (l_timestamp) {
uint64_t now = get_us();
time_t t_now = now / 1000000;
@ -148,28 +156,26 @@ void dolog(const log_level_t ll, const char *fmt, ...)
ll_names[ll], get_thread_name().c_str());
if (ll <= log_level_file && is_file == false)
send_syslog(ll, str);
send_syslog(ll, log_buffer);
#if !defined(ESP32)
if (ll <= log_level_file && lfh != nullptr)
fprintf(lfh, "%s%s\n", ts_str, str);
fprintf(lfh, "%s%s\n", ts_str, log_buffer);
#endif
if (ll <= log_level_screen)
printf("%s%s\r\n", ts_str, str);
printf("%s%s\r\n", ts_str, log_buffer);
}
else {
if (ll <= log_level_file && is_file == false)
send_syslog(ll, str);
send_syslog(ll, log_buffer);
#if !defined(ESP32)
if (ll <= log_level_file && lfh != nullptr)
fprintf(lfh, "%s\n", str);
fprintf(lfh, "%s\n", log_buffer);
#endif
if (ll <= log_level_screen)
printf("%s\r\n", str);
printf("%s\r\n", log_buffer);
}
free(str);
#endif
}

View file

@ -36,8 +36,8 @@ void setBit(uint16_t & v, const int bit, const bool vb)
std::string format(const char *const fmt, ...)
{
#if defined(BUILD_FOR_RP2040)
char buffer[128];
#if defined(BUILD_FOR_RP2040) || defined(ESP32)
char buffer[256];
va_list ap;
va_start(ap, fmt);