SOL_API void sol_log_print_function_syslog(void *data, const struct sol_log_domain *domain, uint8_t message_level, const char *file, const char *function, int line, const char *format, va_list args) { int level = _sol_log_level_to_syslog(message_level); vsyslog(level, format, args); }
SOL_API void sol_log_print_function_syslog(void *data, const struct sol_log_domain *domain, uint8_t message_level, const char *file, const char *function, int line, const char *format, va_list args) { int level = _sol_log_level_to_syslog(message_level); #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" vsyslog(level, format, args); #pragma GCC diagnostic pop }
SOL_API void sol_log_print_function_journal(void *data, const struct sol_log_domain *domain, uint8_t message_level, const char *file, const char *function, int line, const char *format, va_list args) { #ifdef PLATFORM_SYSTEMD char *code_file = NULL; char *code_line = NULL; char *msg = NULL; int r, sd_level = _sol_log_level_to_syslog(message_level); r = asprintf(&code_file, "CODE_FILE=%s", file); if (r == -1) fprintf(stderr, "ERR: asprintf() CODE_FILE=%s failed\n", file); r = asprintf(&code_line, "CODE_LINE=%d", line); if (r == -1) fprintf(stderr, "ERR: asprintf() CODE_LINE=%d failed\n", line); r = vasprintf(&msg, format, args); if (r == -1) fprintf(stderr, "ERR: asprintf() %s failed\n", format); sd_journal_send_with_location(code_file, code_line, function, "PRIORITY=%i", sd_level, "MESSAGE=%s", msg ? msg : format, #ifdef PTHREAD "THREAD=%" PRIu64, (uint64_t)(uintptr_t)pthread_self(), #endif NULL); free(code_file); free(code_line); free(msg); #else static bool once = false; if (!once) { once = true; fputs("ERROR: systemd support not compiled in, using syslog.\n", stderr); } sol_log_print_function_syslog(data, domain, message_level, file, function, line, format, args); #endif }