- len = time_len = strftime(s, sizeof s, "%b %d %H:%M:%S|", &tm);
- len += sprintf(s + len, "%05d|%s|%s:",
- ++msg_num, module_name, level_name);
- va_start(args, message);
- len += vsnprintf(s + len, sizeof s - len, message, args);
- va_end(args);
- if (len >= sizeof s) {
- len = sizeof s;
- }
- if (s[len - 1] == '\n') {
- s[len - 1] = '\0';
- }
+ /* Compose log message. */
+ ds_init(&s);
+ ds_reserve(&s, 1024);
+ ds_put_strftime(&s, "%b %d %H:%M:%S|", &tm);
+ time_len = s.length;
+ ds_put_format(&s, "%05d|%s|%s:", ++msg_num, module_name, level_name);
+ ds_put_format_valist(&s, message, args);
+ ds_chomp(&s, '\n');