Сначала измените регистратор так, чтобы он принимал имя функции:
int logger_internal(const char* func, int priority, const char* format, ...);
Но вызывайте его через макрос:
#define logger(priority, format, ...) \
logger_internal(__FUNCTION__, priority, format, __VA_ARGS__)
Изменение тела logger_internal
для получения дополнительного параметрана счет это немного раздражает, но не сложно.Вероятно, самый простой способ - добавить функцию к аргументу формата;что-то вроде (не проверено):
int logger_internal(const char* func, int priority, const char* format, ...) {
va_list args;
size_t func_l = strlen(func);
size_t format_l = strlen(format);
char* fmt = malloc(func_l + format_l + 2);
memcpy(fmt, func, func_l);
fmt[func_l] = ' ';
memcpy(&(fmt[func_l + 1]), format, format_l);
fmt[func_l + 1 + format_l] = '\0';
va_start(args, format);
vsyslog(priority, fmt, args);
va_end(args);
free(fmt);
}
Но очевидно, что эта часть будет зависеть от того, как вы хотите, чтобы ваша запись в системном журнале выглядела.