]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/zlog_targets.c
Merge pull request #10583 from donaldsharp/pim_upstream_timers
[mirror_frr.git] / lib / zlog_targets.c
index 7799fbfda75015d81a3309cf69525dcb52fd102a..48785ad298568aae6398ab25e474701216140c7c 100644 (file)
@@ -31,7 +31,6 @@
  * absolute end.
  */
 
-DECLARE_MGROUP(LOG);
 DEFINE_MGROUP_ACTIVEATEXIT(LOG, "logging subsystem");
 
 DEFINE_MTYPE_STATIC(LOG, LOG_FD,        "log file target");
@@ -79,13 +78,17 @@ void zlog_fd(struct zlog_target *zt, struct zlog_msg *msgs[], size_t nmsgs)
                int prio = zlog_msg_prio(msg);
 
                if (prio <= zt->prio_min) {
+                       struct fbuf fbuf = {
+                               .buf = ts_buf,
+                               .pos = ts_pos,
+                               .len = sizeof(ts_buf),
+                       };
+
                        iov[iovpos].iov_base = ts_pos;
-                       if (iovpos > 0)
-                               *ts_pos++ = '\n';
-                       ts_pos += zlog_msg_ts(msg, ts_pos,
-                                             sizeof(ts_buf) - 1
-                                                     - (ts_pos - ts_buf),
-                                             ZLOG_TS_LEGACY | zte->ts_subsec);
+                       zlog_msg_ts(msg, &fbuf,
+                                   ZLOG_TS_LEGACY | zte->ts_subsec);
+                       ts_pos = fbuf.pos;
+
                        *ts_pos++ = ' ';
                        iov[iovpos].iov_len =
                                ts_pos - (char *)iov[iovpos].iov_base;
@@ -107,7 +110,7 @@ void zlog_fd(struct zlog_target *zt, struct zlog_msg *msgs[], size_t nmsgs)
 
                        iov[iovpos].iov_base =
                                (char *)zlog_msg_text(msg, &textlen);
-                       iov[iovpos].iov_len = textlen;
+                       iov[iovpos].iov_len = textlen + 1;
 
                        iovpos++;
                }
@@ -120,11 +123,6 @@ void zlog_fd(struct zlog_target *zt, struct zlog_msg *msgs[], size_t nmsgs)
                if (iovpos > 0 && (ts_buf + sizeof(ts_buf) - ts_pos < TS_LEN
                                   || i + 1 == nmsgs
                                   || array_size(iov) - iovpos < 5)) {
-                       iov[iovpos].iov_base = (char *)"\n";
-                       iov[iovpos].iov_len = 1;
-
-                       iovpos++;
-
                        writev(fd, iov, iovpos);
 
                        iovpos = 0;
@@ -439,13 +437,16 @@ static void zlog_syslog(struct zlog_target *zt, struct zlog_msg *msgs[],
 {
        size_t i;
        struct zlt_syslog *zte = container_of(zt, struct zlt_syslog, zt);
+       const char *text;
+       size_t text_len;
 
        for (i = 0; i < nmsgs; i++) {
                if (zlog_msg_prio(msgs[i]) > zt->prio_min)
                        continue;
 
-               syslog(zlog_msg_prio(msgs[i]) | zte->syslog_facility, "%s",
-                      zlog_msg_text(msgs[i], NULL));
+               text = zlog_msg_text(msgs[i], &text_len);
+               syslog(zlog_msg_prio(msgs[i]) | zte->syslog_facility, "%.*s",
+                      (int)text_len, text);
        }
 }