diff options
| author | Ray Strode <rstrode@redhat.com> | 2007-05-23 11:22:07 -0400 |
|---|---|---|
| committer | Ray Strode <rstrode@redhat.com> | 2007-05-23 11:22:07 -0400 |
| commit | c8e7fc693c0f959f5ee26715908df5aa7e8a0eae (patch) | |
| tree | 547f161f67d20ef27ed16bdd1de3e77cce4876da | |
| parent | b3dca3908969dc95f5bb555cf4c2714fe68f7aec (diff) | |
| download | plymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.tar.gz plymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.tar.xz plymouth-c8e7fc693c0f959f5ee26715908df5aa7e8a0eae.zip | |
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.
| -rw-r--r-- | src/ply-logger.c | 54 | ||||
| -rw-r--r-- | src/ply-logger.h | 31 |
2 files changed, 67 insertions, 18 deletions
diff --git a/src/ply-logger.c b/src/ply-logger.c index 9cd5eed..24900d1 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 @@ -329,6 +350,23 @@ ply_logger_flush (ply_logger_t *logger) } 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) { assert (logger != NULL); @@ -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 3eae6c2..1ea5efd 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: */ |
