uint32_t is_enabled : 1;
uint32_t tracing_is_enabled : 1;
+ uint32_t syslog_is_enabled : 1;
+ uint32_t is_error_default : 1;
+ uint32_t is_default : 1;
};
static bool ply_text_is_loggable (const char *string,
assert (message != NULL);
+ if (logger->syslog_is_enabled) {
+ syslog (LOG_WARNING,
+ "%.*s",
+ message,
+ number_of_bytes);
+ }
+
ply_logger_write (logger, message, number_of_bytes, false);
free (message);
}
if (logger->buffer_size == 0)
return true;
+ if (logger->syslog_is_enabled) {
+ int log_priority;
+
+ if (logger->tracing_is_enabled) {
+ log_priority = LOG_DEBUG;
+ } else if (logger->is_default) {
+ log_priority = LOG_INFO;
+ } else if (logger->is_error_default) {
+ log_priority = LOG_WARNING;
+ }
+
+ syslog (log_priority,
+ "%.*s",
+ logger->buffer_size,
+ logger->buffer);
+ }
+
if (!ply_logger_write (logger, logger->buffer, logger->buffer_size, true))
return false;
if (logger == NULL) {
logger = ply_logger_new ();
ply_logger_set_output_fd (logger, STDOUT_FILENO);
+ logger->is_default = true;
}
return logger;
ply_logger_set_output_fd (logger, STDERR_FILENO);
ply_logger_set_flush_policy (logger,
PLY_LOGGER_FLUSH_POLICY_EVERY_TIME);
+ logger->is_error_default = true;
}
return logger;
close (logger->output_fd);
}
+ if (logger->syslog_is_enabled) {
+ ply_logger_close_syslog (logger);
+ }
+
ply_logger_free_filters (logger);
free (logger->filename);
ply_logger_set_output_fd (logger, -1);
}
+void
+ply_logger_open_syslog (ply_logger_t *logger)
+{
+ openlog (NULL, 0, LOG_DAEMON);
+}
+
+void
+ply_logger_close_syslog (ply_logger_t *logger)
+{
+ closelog ();
+}
+
void
ply_logger_set_output_fd (ply_logger_t *logger,
int fd)
bool ply_logger_open_file (ply_logger_t *logger,
const char *filename);
void ply_logger_close_file (ply_logger_t *logger);
+bool ply_logger_open_syslog (ply_logger_t *logger);
+void ply_logger_close_syslog (ply_logger_t *logger);
void ply_logger_set_output_fd (ply_logger_t *logger,
int fd);
int ply_logger_get_output_fd (ply_logger_t *logger);
check_verbosity (state_t *state)
{
char *stream;
+ char *syslog;
+ bool found_output_target = false;
ply_trace ("checking if tracing should be enabled");
free (file);
}
- } else {
+
+ found_output_target = true;
+ }
+
+ syslog = ply_kernel_command_line_get_key_value ("plymouth.debug=syslog");
+
+ if (syslog != NULL) {
+ ply_logger_open_syslog (ply_logger_get_error_default ());
+ found_output_target = true;
+ }
+
+ if (!found_output_target) {
ply_trace ("tracing shouldn't be enabled!");
}