mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-04-19 19:25:41 +02:00
log: make syslog facility and level configurable, always log filename+lineno
This commit is contained in:
parent
df1a004f97
commit
0794b453dd
3 changed files with 26 additions and 15 deletions
34
log.c
34
log.c
|
@ -15,14 +15,27 @@ static bool colorize = false;
|
||||||
static bool do_syslog = true;
|
static bool do_syslog = true;
|
||||||
|
|
||||||
void
|
void
|
||||||
log_init(enum log_colorize _colorize, bool _do_syslog)
|
log_init(enum log_colorize _colorize, bool _do_syslog,
|
||||||
|
enum log_facility syslog_facility, enum log_class syslog_level)
|
||||||
{
|
{
|
||||||
|
static const int facility_map[] = {
|
||||||
|
[LOG_FACILITY_USER] = LOG_USER,
|
||||||
|
[LOG_FACILITY_DAEMON] = LOG_DAEMON,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int level_map[] = {
|
||||||
|
[LOG_CLASS_ERROR] = LOG_ERR,
|
||||||
|
[LOG_CLASS_WARNING] = LOG_WARNING,
|
||||||
|
[LOG_CLASS_INFO] = LOG_INFO,
|
||||||
|
[LOG_CLASS_DEBUG] = LOG_DEBUG,
|
||||||
|
};
|
||||||
|
|
||||||
colorize = _colorize == LOG_COLORIZE_NEVER ? false : _colorize == LOG_COLORIZE_ALWAYS ? true : isatty(STDERR_FILENO);
|
colorize = _colorize == LOG_COLORIZE_NEVER ? false : _colorize == LOG_COLORIZE_ALWAYS ? true : isatty(STDERR_FILENO);
|
||||||
do_syslog = _do_syslog;
|
do_syslog = _do_syslog;
|
||||||
|
|
||||||
if (do_syslog) {
|
if (do_syslog) {
|
||||||
openlog(NULL, /*LOG_PID*/0, LOG_USER);
|
openlog(NULL, /*LOG_PID*/0, facility_map[syslog_facility]);
|
||||||
setlogmask(LOG_UPTO(LOG_WARNING));
|
setlogmask(LOG_UPTO(level_map[syslog_level]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,11 +65,7 @@ _log(enum log_class log_class, const char *module, const char *file, int lineno,
|
||||||
|
|
||||||
if (colorize)
|
if (colorize)
|
||||||
fprintf(stderr, "\e[2m");
|
fprintf(stderr, "\e[2m");
|
||||||
#if defined(_DEBUG)
|
|
||||||
fprintf(stderr, "%s:%d: ", file, lineno);
|
fprintf(stderr, "%s:%d: ", file, lineno);
|
||||||
#else
|
|
||||||
fprintf(stderr, "%s: ", module);
|
|
||||||
#endif
|
|
||||||
if (colorize)
|
if (colorize)
|
||||||
fprintf(stderr, "\e[0m");
|
fprintf(stderr, "\e[0m");
|
||||||
|
|
||||||
|
@ -69,8 +78,10 @@ _log(enum log_class log_class, const char *module, const char *file, int lineno,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_sys_log(enum log_class log_class, const char *module, const char *file,
|
_sys_log(enum log_class log_class, const char *module,
|
||||||
int lineno, const char *fmt, int sys_errno, va_list va)
|
const char *file __attribute__((unused)),
|
||||||
|
int lineno __attribute__((unused)),
|
||||||
|
const char *fmt, int sys_errno, va_list va)
|
||||||
{
|
{
|
||||||
if (!do_syslog)
|
if (!do_syslog)
|
||||||
return;
|
return;
|
||||||
|
@ -94,8 +105,7 @@ _sys_log(enum log_class log_class, const char *module, const char *file,
|
||||||
/* Calculate required size of buffer holding the entire log message */
|
/* Calculate required size of buffer holding the entire log message */
|
||||||
int required_len = 0;
|
int required_len = 0;
|
||||||
required_len += strlen(module) + 2; /* "%s: " */
|
required_len += strlen(module) + 2; /* "%s: " */
|
||||||
required_len += vsnprintf(NULL, 0, fmt, va2);
|
required_len += vsnprintf(NULL, 0, fmt, va2); va_end(va2);
|
||||||
va_end(va2);
|
|
||||||
|
|
||||||
if (sys_errno != 0)
|
if (sys_errno != 0)
|
||||||
required_len += strlen(sys_err) + 2; /* ": %s" */
|
required_len += strlen(sys_err) + 2; /* ": %s" */
|
||||||
|
@ -108,7 +118,7 @@ _sys_log(enum log_class log_class, const char *module, const char *file,
|
||||||
idx += vsnprintf(&msg[idx], required_len + 1 - idx, fmt, va);
|
idx += vsnprintf(&msg[idx], required_len + 1 - idx, fmt, va);
|
||||||
|
|
||||||
if (sys_errno != 0) {
|
if (sys_errno != 0) {
|
||||||
idx += snprintf(
|
snprintf(
|
||||||
&msg[idx], required_len + 1 - idx, ": %s", strerror(sys_errno));
|
&msg[idx], required_len + 1 - idx, ": %s", strerror(sys_errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
log.h
5
log.h
|
@ -1,11 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
enum log_colorize { LOG_COLORIZE_NEVER, LOG_COLORIZE_ALWAYS, LOG_COLORIZE_AUTO };
|
enum log_colorize { LOG_COLORIZE_NEVER, LOG_COLORIZE_ALWAYS, LOG_COLORIZE_AUTO };
|
||||||
|
enum log_facility { LOG_FACILITY_USER, LOG_FACILITY_DAEMON };
|
||||||
enum log_class { LOG_CLASS_ERROR, LOG_CLASS_WARNING, LOG_CLASS_INFO, LOG_CLASS_DEBUG };
|
enum log_class { LOG_CLASS_ERROR, LOG_CLASS_WARNING, LOG_CLASS_INFO, LOG_CLASS_DEBUG };
|
||||||
|
|
||||||
void log_init(enum log_colorize colorize, bool do_syslog);
|
void log_init(enum log_colorize colorize, bool do_syslog,
|
||||||
|
enum log_facility syslog_facility, enum log_class syslog_level);
|
||||||
void log_deinit(void);
|
void log_deinit(void);
|
||||||
|
|
||||||
void log_msg(enum log_class log_class, const char *module,
|
void log_msg(enum log_class log_class, const char *module,
|
||||||
|
|
2
main.c
2
main.c
|
@ -275,7 +275,7 @@ main(int argc, char *const *argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log_init(log_colorize, log_syslog);
|
log_init(log_colorize, log_syslog, LOG_FACILITY_USER, LOG_CLASS_WARNING);
|
||||||
|
|
||||||
const struct sigaction sa = {.sa_handler = &signal_handler};
|
const struct sigaction sa = {.sa_handler = &signal_handler};
|
||||||
sigaction(SIGINT, &sa, NULL);
|
sigaction(SIGINT, &sa, NULL);
|
||||||
|
|
Loading…
Add table
Reference in a new issue