9 struct strftime_cache {
14 static void log_(char const *log_type, FILE *stream, char const *fmt,
16 static struct strftime_cache strft;
18 time_t t = time(NULL);
19 if (t != strft.time) {
22 struct tm *tmp = localtime_r(&t, &tm);
23 strftime(strft.buf, sizeof(strft.buf), "%Y-%m-%dT%H:%M:%S", tmp);
26 fputs(program_invocation_short_name, stream);
28 fputs(strft.buf, stream);
30 fputs(log_type, stream);
32 vfprintf(stream, fmt, args);
36 void lognotice(char const *fmt, ...) {
39 log_("notice", stdout, fmt, a);
43 void logerror(char const *fmt, ...) {
46 log_("error", stderr, fmt, a);
50 void fatal(char const *fmt, ...) {
53 log_("fatal", stderr, fmt, a);
59 void logdebug(char const *fmt, ...) {
62 log_("debug", stdout, fmt, a);