less mallocs for logging
This commit is contained in:
parent
209f8f1e88
commit
dbc8aa220d
2 changed files with 21 additions and 15 deletions
32
log.cpp
32
log.cpp
|
@ -29,6 +29,8 @@ FILE *lfh = nullptr;
|
||||||
static int lf_uid = -1;
|
static int lf_uid = -1;
|
||||||
static int lf_gid = -1;
|
static int lf_gid = -1;
|
||||||
static bool l_timestamp = true;
|
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)
|
#if defined(ESP32)
|
||||||
int gettid()
|
int gettid()
|
||||||
|
@ -121,12 +123,18 @@ void dolog(const log_level_t ll, const char *fmt, ...)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char *str = nullptr;
|
for(;;) {
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
int needed_length = vsnprintf(log_buffer, log_buffer_size, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
va_list ap;
|
if (needed_length < log_buffer_size)
|
||||||
va_start(ap, fmt);
|
break;
|
||||||
(void)vasprintf(&str, fmt, ap);
|
|
||||||
va_end(ap);
|
log_buffer_size *= 2;
|
||||||
|
log_buffer = reinterpret_cast<char *>(realloc(log_buffer, log_buffer_size));
|
||||||
|
}
|
||||||
|
|
||||||
if (l_timestamp) {
|
if (l_timestamp) {
|
||||||
uint64_t now = get_us();
|
uint64_t now = get_us();
|
||||||
|
@ -148,28 +156,26 @@ void dolog(const log_level_t ll, const char *fmt, ...)
|
||||||
ll_names[ll], get_thread_name().c_str());
|
ll_names[ll], get_thread_name().c_str());
|
||||||
|
|
||||||
if (ll <= log_level_file && is_file == false)
|
if (ll <= log_level_file && is_file == false)
|
||||||
send_syslog(ll, str);
|
send_syslog(ll, log_buffer);
|
||||||
#if !defined(ESP32)
|
#if !defined(ESP32)
|
||||||
if (ll <= log_level_file && lfh != nullptr)
|
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
|
#endif
|
||||||
|
|
||||||
if (ll <= log_level_screen)
|
if (ll <= log_level_screen)
|
||||||
printf("%s%s\r\n", ts_str, str);
|
printf("%s%s\r\n", ts_str, log_buffer);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ll <= log_level_file && is_file == false)
|
if (ll <= log_level_file && is_file == false)
|
||||||
send_syslog(ll, str);
|
send_syslog(ll, log_buffer);
|
||||||
#if !defined(ESP32)
|
#if !defined(ESP32)
|
||||||
if (ll <= log_level_file && lfh != nullptr)
|
if (ll <= log_level_file && lfh != nullptr)
|
||||||
fprintf(lfh, "%s\n", str);
|
fprintf(lfh, "%s\n", log_buffer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ll <= log_level_screen)
|
if (ll <= log_level_screen)
|
||||||
printf("%s\r\n", str);
|
printf("%s\r\n", log_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(str);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,8 @@ void setBit(uint16_t & v, const int bit, const bool vb)
|
||||||
|
|
||||||
std::string format(const char *const fmt, ...)
|
std::string format(const char *const fmt, ...)
|
||||||
{
|
{
|
||||||
#if defined(BUILD_FOR_RP2040)
|
#if defined(BUILD_FOR_RP2040) || defined(ESP32)
|
||||||
char buffer[128];
|
char buffer[256];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
|
Loading…
Add table
Reference in a new issue