From: Ray Strode Date: Wed, 23 May 2007 15:22:07 +0000 (-0400) Subject: add support for default error logging X-Git-Tag: 0.1.0~262 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8e7fc693c0f959f5ee26715908df5aa7e8a0eae;p=thirdparty%2Fplymouth.git add support for default error logging This commit adds a convience macros, ply_error (), that will by default log error messages to the standard error. This commit also adds a new api for specifying a policy for determining when to automatically flush the log buffer. --- diff --git a/src/ply-logger.c b/src/ply-logger.c index 9cd5eed9..24900d10 100644 --- a/src/ply-logger.c +++ b/src/ply-logger.c @@ -58,6 +58,8 @@ struct _ply_logger char *buffer; size_t buffer_size; size_t buffer_capacity; + + ply_logger_flush_policy_t flush_policy; uint32_t is_enabled : 1; uint32_t tracing_is_enabled : 1; @@ -222,7 +224,7 @@ ply_logger_new (void) logger = calloc (1, sizeof (ply_logger_t)); - logger->output_fd = STDOUT_FILENO; + logger->output_fd = -1; logger->filename = NULL; logger->is_enabled = true; logger->tracing_is_enabled = false; @@ -237,12 +239,31 @@ ply_logger_new (void) ply_logger_t * ply_logger_get_default (void) { - static ply_logger_t *ply_logger = NULL; + static ply_logger_t *logger = NULL; + + if (logger == NULL) + { + logger = ply_logger_new (); + ply_logger_set_output_fd (logger, STDOUT_FILENO); + } + + return logger; +} + +ply_logger_t * +ply_logger_get_error_default (void) +{ + static ply_logger_t *logger = NULL; - if (ply_logger == NULL) - ply_logger = ply_logger_new (); + if (logger == NULL) + { + logger = ply_logger_new (); + ply_logger_set_output_fd (logger, STDERR_FILENO); + ply_logger_set_flush_policy (logger, + PLY_LOGGER_FLUSH_POLICY_EVERY_TIME); + } - return ply_logger; + return logger; } void @@ -328,6 +349,23 @@ ply_logger_flush (ply_logger_t *logger) return true; } +void +ply_logger_set_flush_policy (ply_logger_t *logger, + ply_logger_flush_policy_t policy) +{ + assert (logger != NULL); + + logger->flush_policy = policy; +} + +ply_logger_flush_policy_t +ply_logger_get_flush_policy (ply_logger_t *logger) +{ + assert (logger != NULL); + + return logger->flush_policy; +} + void ply_logger_toggle_logging (ply_logger_t *logger) { @@ -418,6 +456,12 @@ ply_logger_inject_bytes (ply_logger_t *logger, assert (number_of_bytes != 0); ply_logger_buffer (logger, bytes, number_of_bytes); + + assert ((logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED) + || (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME)); + + if (logger->flush_policy == PLY_LOGGER_FLUSH_POLICY_EVERY_TIME) + ply_logger_flush (logger); } #ifdef PLY_ENABLE_TRACING diff --git a/src/ply-logger.h b/src/ply-logger.h index 3eae6c28..1ea5efd5 100644 --- a/src/ply-logger.h +++ b/src/ply-logger.h @@ -28,6 +28,12 @@ typedef struct _ply_logger ply_logger_t; +typedef enum +{ + PLY_LOGGER_FLUSH_POLICY_WHEN_ASKED = 0, + PLY_LOGGER_FLUSH_POLICY_EVERY_TIME +} ply_logger_flush_policy_t; + #ifndef PLY_HIDE_FUNCTION_DECLARATIONS ply_logger_t *ply_logger_new (void); void ply_logger_free (ply_logger_t *logger); @@ -38,12 +44,14 @@ void ply_logger_set_output_fd (ply_logger_t *logger, int fd); int ply_logger_get_output_fd (ply_logger_t *logger); bool ply_logger_flush (ply_logger_t *logger); +void ply_logger_set_flush_policy (ply_logger_t *logger, + ply_logger_flush_policy_t policy); +ply_logger_flush_policy_t ply_logger_get_flush_policy (ply_logger_t *logger); void ply_logger_toggle_logging (ply_logger_t *logger); bool ply_logger_is_logging (ply_logger_t *logger); void ply_logger_inject_bytes (ply_logger_t *logger, const void *bytes, size_t number_of_bytes); - #define ply_logger_inject(logger, format, args...) \ ply_logger_inject_with_non_literal_format_string (logger, \ format "", ##args) @@ -52,6 +60,8 @@ void ply_logger_inject_with_non_literal_format_string (ply_logger_t *logger, const char *format, ...); ply_logger_t *ply_logger_get_default (void); +ply_logger_t *ply_logger_get_error_default (void); + /* tracing is a debugging facility that incurs a hefty performance hit on the * program, so we conditionally compile support for it */ @@ -93,26 +103,21 @@ while (0) ply_logger_open_file (ply_logger_get_default (), filename) #define ply_close_log_file() \ ply_logger_close_file (ply_logger_get_default ()) -#define ply_set_logging_fd(fd) \ - ply_logger_set_output_fd (ply_logger_get_default (), fd) -#define ply_get_logging_fd() \ - ply_logger_get_output_fd (ply_logger_get_default ()) #define ply_flush_log () \ ply_logger_flush (ply_logger_get_default ()) -#define ply_toggle_logging() \ - ply_logger_toggle_logging (ply_logger_get_default ()) -#define ply_is_logging() \ - ply_logger_is_logging (ply_logger_get_default ()) #define ply_log(format, args...) \ ply_logger_inject (ply_logger_get_default (), format, ##args) +#define ply_error(format, args...) \ + ply_logger_inject (ply_logger_get_error_default (), format, ##args) #define ply_toggle_tracing() \ - ply_logger_toggle_tracing (ply_logger_get_default ()) + ply_logger_toggle_tracing (ply_logger_get_error_default ()) #define ply_is_tracing() \ - ply_logger_is_tracing_enabled (ply_logger_get_default ()) + ply_logger_is_tracing_enabled (ply_logger_get_error_default ()) #define ply_trace(format, args...) \ - ply_logger_trace (ply_logger_get_default (), format, ##args) -#endif /* !PLY_HIDE_FUNCTION_DECLARATIONS */ + ply_logger_trace (ply_logger_get_error_default (), format, ##args) + +#endif #endif /* PLY_LOGGER_H */ /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */