log: reduce inline code

This commit is contained in:
Michael Davidsaver
2022-04-05 12:00:22 -07:00
parent c66c0fd100
commit 0dd36215c9
2 changed files with 47 additions and 28 deletions
+36 -17
View File
@@ -48,10 +48,13 @@ namespace detail {
static
unsigned char abortOnCrit;
const char* log_prefix(const char* name, Level lvl)
const char* log_prep(logger& log, unsigned rawlvl)
{
thread_local char prefix[64];
// YYYY-mm-ddTHH:MM:SS.FffFffFff
auto lvl = (Level)(rawlvl&0xff);
if(!log.test(lvl))
return nullptr; // don't log
thread_local char prefix[80];
epicsTimeStamp now;
size_t N;
@@ -73,25 +76,24 @@ const char* log_prefix(const char* name, Level lvl)
default: lname = "<\?\?\?>"; break;
}
epicsSnprintf(prefix+N, sizeof(prefix)-N, " %s %s", lname, name);
int ret = epicsSnprintf(prefix+N, sizeof(prefix)-N, " %s %s", lname, log.name);
if(ret >=0 ) {
N += size_t(ret);
if(N>60) {
// prefix is too long (arbitrary), so move message content to next line
epicsSnprintf(prefix+N, sizeof(prefix)-N, "\n ");
}
}
return prefix;
}
void _log_printf(unsigned lvl, const char* fmt, ...)
static
void _log_vprintf(unsigned rawlvl, const char *fmt, va_list args)
{
bool bt = lvl&0x1000;
auto L = Level(lvl&0xff);
auto abt = L==Level::Crit && abortOnCrit!=0;
errlogVprintf(fmt, args);
{
va_list args;
va_start(args, fmt);
errlogVprintf(fmt, args);
va_end(args);
}
if(abt) {
if(Level(rawlvl&0xff)==Level::Crit && abortOnCrit!=0) {
errlogFlush();
if(abortOnCrit==1) {
// C abort, end process
@@ -103,13 +105,30 @@ void _log_printf(unsigned lvl, const char* fmt, ...)
cantProceed("CRITICAL ERROR\n");
}
} else if(bt) {
} else if(rawlvl&0x1000) {
errlogFlush();
epicsStackTrace();
errlogFlush();
}
}
void _log_printf(unsigned rawlvl, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
_log_vprintf(rawlvl, fmt, args);
va_end(args);
}
void _log_printf_hex(unsigned rawlvl, const void *buf, size_t buflen, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
xerrlogHexPrintf(buf, buflen);
_log_vprintf(rawlvl, fmt, args);
va_end(args);
}
} // namespace detail
namespace {