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
}