9 struct strftime_cache {
14 void log_(char const *log_type, FILE *stream, char const *fmt, va_list args) {
15 static struct strftime_cache strft;
17 time_t t = time(NULL);
18 if (t != strft.time) {
21 struct tm *tmp = localtime_r(&t, &tm);
22 strftime(strft.buf, sizeof(strft.buf), "%Y-%m-%dT%H:%M:%S", tmp);
25 fputs(program_invocation_short_name, stream);
27 fputs(strft.buf, stream);
29 fputs(log_type, stream);
31 vfprintf(stream, fmt, args);
35 void lognotice(char const *fmt, ...) {
38 log_("notice", stdout, fmt, a);
42 void logerror(char const *fmt, ...) {
45 log_("error", stderr, fmt, a);
49 void fatal(char const *fmt, ...) {
52 log_("fatal", stderr, fmt, a);