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;
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;
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
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)
{
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
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);
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)
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
*/
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: */