@ -6,6 +6,7 @@
# include <cassert>
# include <cstring>
# include <limits>
# include <mutex>
# include <string>
@ -62,6 +63,7 @@ class SwaglogState : public LogState {
static SwaglogState s = { } ;
bool LOG_TIMESTAMPS = getenv ( " LOG_TIMESTAMPS " ) ;
uint32_t NO_FRAME_ID = std : : numeric_limits < uint32_t > : : max ( ) ;
static void log ( int levelnum , const char * filename , int lineno , const char * func , const char * msg , const std : : string & log_s ) {
if ( levelnum > = s . print_level ) {
@ -70,14 +72,9 @@ static void log(int levelnum, const char* filename, int lineno, const char* func
char levelnum_c = levelnum ;
zmq_send ( s . sock , ( levelnum_c + log_s ) . c_str ( ) , log_s . length ( ) + 1 , ZMQ_NOBLOCK ) ;
}
static void cloudlog_common ( int levelnum , bool is_timestamp , const char * filename , int lineno , const char * func ,
const char * fmt , va_list args ) {
char * msg_buf = nullptr ;
int ret = vasprintf ( & msg_buf , fmt , args ) ;
if ( ret < = 0 | | ! msg_buf ) return ;
static void cloudlog_common ( int levelnum , const char * filename , int lineno , const char * func ,
char * msg_buf , json11 : : Json : : object msg_j = { } ) {
std : : lock_guard lk ( s . lock ) ;
if ( ! s . initialized ) s . initialize ( ) ;
json11 : : Json : : object log_j = json11 : : Json : : object {
@ -88,17 +85,10 @@ static void cloudlog_common(int levelnum, bool is_timestamp, const char* filenam
{ " funcname " , func } ,
{ " created " , seconds_since_epoch ( ) }
} ;
if ( is_timestamp ) {
json11 : : Json : : object tspt_j = json11 : : Json : : object {
{ " timestamp " , json11 : : Json : : object {
{ " event " , msg_buf } ,
{ " time " , std : : to_string ( nanos_since_boot ( ) ) } }
}
} ;
log_j [ " msg " ] = tspt_j ;
} else {
if ( msg_j . empty ( ) ) {
log_j [ " msg " ] = msg_buf ;
} else {
log_j [ " msg " ] = msg_j ;
}
std : : string log_s = ( ( json11 : : Json ) log_j ) . dump ( ) ;
@ -107,18 +97,46 @@ static void cloudlog_common(int levelnum, bool is_timestamp, const char* filenam
}
void cloudlog_e ( int levelnum , const char * filename , int lineno , const char * func ,
const char * fmt , . . . ) {
const char * fmt , . . . ) {
va_list args ;
va_start ( args , fmt ) ;
cloudlog_common ( levelnum , false , filename , lineno , func , fmt , args ) ;
char * msg_buf = nullptr ;
int ret = vasprintf ( & msg_buf , fmt , args ) ;
va_end ( args ) ;
if ( ret < = 0 | | ! msg_buf ) return ;
cloudlog_common ( levelnum , filename , lineno , func , msg_buf ) ;
}
void cloudlog_t ( int levelnum , const char * filename , int lineno , const char * func ,
const char * fmt , . . . ) {
void cloudlog_t_common ( int levelnum , const char * filename , int lineno , const char * func ,
uint32_t frame_id , const char * fmt , va_list args ) {
if ( ! LOG_TIMESTAMPS ) return ;
char * msg_buf = nullptr ;
int ret = vasprintf ( & msg_buf , fmt , args ) ;
if ( ret < = 0 | | ! msg_buf ) return ;
json11 : : Json : : object tspt_j = json11 : : Json : : object {
{ " event " , msg_buf } ,
{ " time " , std : : to_string ( nanos_since_boot ( ) ) }
} ;
if ( frame_id < NO_FRAME_ID ) {
tspt_j [ " frame_id " ] = std : : to_string ( frame_id ) ;
}
tspt_j = json11 : : Json : : object { { " timestamp " , tspt_j } } ;
cloudlog_common ( levelnum , filename , lineno , func , msg_buf , tspt_j ) ;
}
void cloudlog_te ( int levelnum , const char * filename , int lineno , const char * func ,
const char * fmt , . . . ) {
va_list args ;
va_start ( args , fmt ) ;
cloudlog_t_common ( levelnum , filename , lineno , func , NO_FRAME_ID , fmt , args ) ;
va_end ( args ) ;
}
void cloudlog_te ( int levelnum , const char * filename , int lineno , const char * func ,
uint32_t frame_id , const char * fmt , . . . ) {
va_list args ;
va_start ( args , fmt ) ;
cloudlog_common ( levelnum , true , filename , lineno , func , fmt , args ) ;
cloudlog_t_ common ( levelnum , filename , lineno , func , frame_id , fmt , args ) ;
va_end ( args ) ;
}