Skip to content

Commit

Permalink
Fix prefixing and suffixing in unbuffered fpm logging
Browse files Browse the repository at this point in the history
  • Loading branch information
bukka committed Aug 28, 2017
1 parent 6a7abb6 commit 1f1d231
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions sapi/fpm/fpm/zlog.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,39 +323,53 @@ static inline ssize_t zlog_stream_unbuffered_write(struct zlog_stream *stream, c
{
int finished = 0;
const char *append;
size_t append_len;
size_t append_len = 0, available_len;
ssize_t written;

if (stream->len == 0) {
stream->len = zlog_stream_prefix_ex(stream, stream->function, stream->line);
}

if (stream->len + len >= zlog_limit) {
if (stream->wrap) {
if (stream->wrap_prefix != NULL) {
zlog_stream_direct_write_ex(
stream, stream->wrap_prefix, stream->wrap_prefix_len, NULL, 0);
}
len = zlog_limit - stream->len;
available_len = zlog_limit - stream->len;
if (stream->len + len == zlog_limit) {
append = NULL;
append_len = 0;
} else {
append = "\n";
append_len = 1;
}
if (stream->wrap_suffix) {
zlog_stream_direct_write(stream, buf, len);
if (stream->wrap_suffix && append != NULL) {
zlog_stream_direct_write(stream, buf, available_len);
zlog_stream_direct_write_ex(
stream, stream->wrap_suffix, stream->wrap_suffix_len, append, append_len);
} else {
zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
zlog_stream_direct_write_ex(stream, buf, available_len, append, append_len);
}
stream->len = 0;
/* TODO: use loop to speed it up */
return len + zlog_stream_unbuffered_write(stream, buf + len, len);
written = zlog_stream_unbuffered_write(stream, buf + available_len, len - available_len);
if (written > 0) {
return available_len + written;
}

return written;
}
stream->finished = finished = 1;
append = (stream->len + len == zlog_limit) ? "\n" : "...\n";
append_len = sizeof(append) - 1;
len = zlog_limit - stream->len - append_len;
}

return zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
written = zlog_stream_direct_write_ex(stream, buf, len, append, append_len);
if (written > 0) {
/* currently written will be always len as the write is blocking
* - this should be address if we change to non-blocking write */
stream->len += written;
}

return written;
}
/* }}} */

Expand Down Expand Up @@ -456,14 +470,16 @@ ssize_t zlog_stream_set_wrapping_prefix(struct zlog_stream *stream, const char *
va_list args;

va_start(args, fmt);
len = vsnprintf(buf, MAX_WRAPPING_PREFIX_LENGTH, fmt, args);
len = vsnprintf(buf, MAX_WRAPPING_PREFIX_LENGTH - 1, fmt, args);
va_end(args);

stream->wrap_prefix = malloc(len);
if (stream->wrap_prefix != NULL) {
if (stream->wrap_prefix == NULL) {
return -1;
}
memcpy(stream->wrap_prefix, buf, len);
stream->wrap_prefix[len] = 0;
stream->wrap_prefix_len = len;

return len;
}
Expand Down Expand Up @@ -603,7 +619,12 @@ zlog_bool zlog_stream_finish(struct zlog_stream *stream) /* {{{ */
stream->buf[stream->len++] = '\n';
zlog_stream_direct_write(stream, stream->buf, stream->len);
} else if (!stream->finished) {
if (stream->wrap_final_suffix != NULL) {
if (stream->wrap_suffix != NULL) {
zlog_stream_direct_write_ex(
stream, stream->wrap_suffix, stream->wrap_suffix_len,
stream->wrap_final_suffix, stream->wrap_final_suffix_len);
zlog_stream_direct_write(stream, "\n", 1);
} else if (stream->wrap_final_suffix != NULL) {
zlog_stream_direct_write_ex(
stream, stream->wrap_final_suffix, stream->wrap_final_suffix_len, "\n", 1);
} else {
Expand Down

0 comments on commit 1f1d231

Please sign in to comment.