forked from minhngoc25a/freetype2
[base] Updates to print timestamp and name of `FT_COMPONENT' in logs.
* include/freetype/internal/ftdebug.h (FT_LOGGING_TAG, FT_LOGGING_TAG_): New macros to resolve the value of `FT_COMPONENT' into a string. (ft_add_tag, ft_remove_tag): New functions to add and remove dlg tags. * src/base/ftdebug.c: Added new variables to control the logging of timestamp and name of `FT_COMPONENT' along with actual logs. (ft_add_tag, ft_remove_tag): Added function definition. (ft_log_handler): Updates to print timestamp and name of `FT_COMPONENT'. (ft_debug_init): If `FT_LOGGING' macro is defined users can now control the logging of timestamp and name of `FT_COMPONENT' by adding tags in environment variable `FT2_DEBUG'
This commit is contained in:
parent
85060d51a1
commit
806adbe829
|
@ -105,6 +105,11 @@ FT_BEGIN_HEADER
|
||||||
|
|
||||||
#ifdef FT_LOGGING
|
#ifdef FT_LOGGING
|
||||||
|
|
||||||
|
/* we need two macros to convert the names of `FT_COMPONENT' to a string */
|
||||||
|
#define FT_LOGGING_TAG( x ) FT_LOGGING_TAG_( x )
|
||||||
|
#define FT_LOGGING_TAG_( x ) #x
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
*
|
*
|
||||||
* If FT_LOGGING is enabled, trace messages will be sent to dlg's API and
|
* If FT_LOGGING is enabled, trace messages will be sent to dlg's API and
|
||||||
|
@ -117,12 +122,14 @@ FT_BEGIN_HEADER
|
||||||
#define FT_LOG( level, varformat ) \
|
#define FT_LOG( level, varformat ) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
|
const char* dlg_tag = FT_LOGGING_TAG( FT_COMPONENT ); \
|
||||||
|
ft_add_tag( dlg_tag ); \
|
||||||
if( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
|
if( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
|
||||||
dlg_trace varformat; \
|
dlg_trace varformat; \
|
||||||
|
ft_remove_tag( dlg_tag ); \
|
||||||
}while( 0 )
|
}while( 0 )
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define FT_LOG( level, varformat ) \
|
#define FT_LOG( level, varformat ) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
|
@ -266,7 +273,10 @@ FT_BEGIN_HEADER
|
||||||
#define FT_ERROR( varformat ) \
|
#define FT_ERROR( varformat ) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
|
const char* dlg_tag = FT_LOGGING_TAG( FT_COMPONENT ); \
|
||||||
|
ft_add_tag( dlg_tag ); \
|
||||||
dlg_trace varformat; \
|
dlg_trace varformat; \
|
||||||
|
ft_remove_tag( dlg_tag ); \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -388,6 +398,18 @@ FT_BEGIN_HEADER
|
||||||
FT_BASE( void )
|
FT_BASE( void )
|
||||||
ft_logging_deinit( void );
|
ft_logging_deinit( void );
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* For printing the name of `FT_COMPONENT' along with the actual log, a dlg
|
||||||
|
* tag with the name of `FT_COMPONENT' needs to be added.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
FT_BASE( void )
|
||||||
|
ft_add_tag( const char* tag );
|
||||||
|
|
||||||
|
FT_BASE( void )
|
||||||
|
ft_remove_tag( const char* tag );
|
||||||
|
|
||||||
#endif /* FT_LOGGING */
|
#endif /* FT_LOGGING */
|
||||||
|
|
||||||
FT_END_HEADER
|
FT_END_HEADER
|
||||||
|
|
|
@ -55,12 +55,27 @@
|
||||||
*
|
*
|
||||||
* 2. ft_fileptr: store the FILE*
|
* 2. ft_fileptr: store the FILE*
|
||||||
*
|
*
|
||||||
|
* 3. ft_component: a string that holds the name of FT_COMPONENT
|
||||||
|
*
|
||||||
|
* 4. ft_component_flag: a flag when true, prints the name of
|
||||||
|
* FT_COMPONENT along with actual log message.
|
||||||
|
*
|
||||||
|
* 5. ft_timestamp_flag: a flag when true, prints time along with log
|
||||||
|
* actual log message.
|
||||||
|
*
|
||||||
|
* 6. ft_have_newline_char: It is used to differentiate between a log
|
||||||
|
* message with '\n' char and log message without '\n' char
|
||||||
|
*
|
||||||
* Static Variables are defined here to remove [ -Wunused-variable ]
|
* Static Variables are defined here to remove [ -Wunused-variable ]
|
||||||
* warning
|
* warning
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static const char* ft_default_trace_level = NULL;
|
static const char* ft_default_trace_level = NULL;
|
||||||
static FILE* ft_fileptr = NULL;
|
static FILE* ft_fileptr = NULL;
|
||||||
|
static const char* ft_component = NULL;
|
||||||
|
static bool ft_component_flag = false;
|
||||||
|
static bool ft_timestamp_flag = false;
|
||||||
|
static bool ft_have_newline_char = true;
|
||||||
|
|
||||||
dlg_handler ft_default_log_handler = NULL;
|
dlg_handler ft_default_log_handler = NULL;
|
||||||
|
|
||||||
|
@ -231,6 +246,36 @@
|
||||||
if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
|
if ( *p == ' ' || *p == '\t' || *p == ',' || *p == ';' || *p == '=' )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
#ifdef FT_LOGGING
|
||||||
|
/* check extra arguments for logging */
|
||||||
|
if( *p == '-' )
|
||||||
|
{
|
||||||
|
const char* r = ++p;
|
||||||
|
if( *r == 'v' )
|
||||||
|
{
|
||||||
|
ft_component_flag = true;
|
||||||
|
const char* s = ++r;
|
||||||
|
if( *s == 't' )
|
||||||
|
{
|
||||||
|
ft_timestamp_flag = true;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else if( *r == 't' )
|
||||||
|
{
|
||||||
|
ft_timestamp_flag = true;
|
||||||
|
const char* s = ++r;
|
||||||
|
if( *s == 'v' )
|
||||||
|
{
|
||||||
|
ft_component_flag = true;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* FT_LOGGING */
|
||||||
|
|
||||||
/* read toggle name, followed by ':' */
|
/* read toggle name, followed by ':' */
|
||||||
q = p;
|
q = p;
|
||||||
while ( *p && *p != ':' )
|
while ( *p && *p != ':' )
|
||||||
|
@ -379,11 +424,40 @@
|
||||||
const char* string, void* data )
|
const char* string, void* data )
|
||||||
{
|
{
|
||||||
( void ) data;
|
( void ) data;
|
||||||
const char* features = "%c";
|
const char* features ;
|
||||||
|
if( ft_timestamp_flag && ft_component_flag && ft_have_newline_char )
|
||||||
|
features = "[%h:%m %t] %c";
|
||||||
|
else if( ft_component_flag && ft_have_newline_char)
|
||||||
|
features = "[%t] %c";
|
||||||
|
else if( ft_timestamp_flag && ft_have_newline_char )
|
||||||
|
features = "[%h:%m] %c";
|
||||||
|
else
|
||||||
|
features = "%c";
|
||||||
|
|
||||||
dlg_generic_outputf_stream( ft_fileptr, features, origin, string,
|
dlg_generic_outputf_stream( ft_fileptr, features, origin, string,
|
||||||
dlg_default_output_styles, true );
|
dlg_default_output_styles, true );
|
||||||
|
|
||||||
|
|
||||||
|
if( strchr( string, '\n' ) )
|
||||||
|
ft_have_newline_char = true;
|
||||||
|
else
|
||||||
|
ft_have_newline_char = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* documentation is in ftdebug.h */
|
||||||
|
FT_BASE_DEF( void )
|
||||||
|
ft_add_tag( const char* tag )
|
||||||
|
{
|
||||||
|
ft_component = tag;
|
||||||
|
dlg_add_tag( tag, NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* documentation is in ftdebug.h */
|
||||||
|
FT_BASE_DEF( void )
|
||||||
|
ft_remove_tag( const char* tag )
|
||||||
|
{
|
||||||
|
dlg_remove_tag( tag, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* FT_LOGGING */
|
#endif /* FT_LOGGING */
|
||||||
|
|
Loading…
Reference in New Issue