Kouhei Sutou
null+****@clear*****
Mon Jan 26 18:21:39 JST 2015
Kouhei Sutou 2015-01-26 18:21:39 +0900 (Mon, 26 Jan 2015) New Revision: 93460250832bce03e16315457aef7af9063adcf9 https://github.com/groonga/groonga/commit/93460250832bce03e16315457aef7af9063adcf9 Message: groonga-httpd: support long error message over NGX_MAX_ERROR_STR NGX_MAX_ERROR_STR is 2048. Modified files: src/httpd/nginx-module/ngx_http_groonga_module.c Modified: src/httpd/nginx-module/ngx_http_groonga_module.c (+44 -8) =================================================================== --- src/httpd/nginx-module/ngx_http_groonga_module.c 2015-01-26 15:28:09 +0900 (45fa0c9) +++ src/httpd/nginx-module/ngx_http_groonga_module.c 2015-01-26 18:21:39 +0900 (6c9e217) @@ -143,18 +143,54 @@ ngx_http_groonga_logger_log(grn_ctx *ctx, grn_log_level level, const char level_marks[] = " EACewnid-"; u_char buffer[NGX_MAX_ERROR_STR]; u_char *last; - + size_t prefix_size; + size_t message_size; + size_t location_size; + size_t postfix_size; + size_t log_message_size; + +#define LOG_PREFIX_FORMAT "%s|%c|%s " + prefix_size = + strlen(timestamp) + + 1 /* | */ + + 1 /* %c */ + + 1 /* | */ + + strlen(title) + + 1 /* a space */; + message_size = strlen(message); if (location && *location) { - last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR, - "%s|%c|%s %s %s\n", - timestamp, *(level_marks + level), title, message, - location); + location_size = 1 /* a space */ + strlen(location); } else { + location_size = 0; + } + postfix_size = 1 /* \n */; + log_message_size = prefix_size + message_size + location_size + postfix_size; + + if (log_message_size > NGX_MAX_ERROR_STR) { last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR, - "%s|%c|%s %s\n", - timestamp, *(level_marks + level), title, message); + LOG_PREFIX_FORMAT, + timestamp, *(level_marks + level), title); + ngx_write_fd(logger_data->file->fd, buffer, last - buffer); + ngx_write_fd(logger_data->file->fd, (void *)message, message_size); + if (location_size > 0) { + ngx_write_fd(logger_data->file->fd, " ", 1); + ngx_write_fd(logger_data->file->fd, (void *)location, location_size); + } + ngx_write_fd(logger_data->file->fd, "\n", 1); + } else { + if (location && *location) { + last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR, + LOG_PREFIX_FORMAT " %s %s\n", + timestamp, *(level_marks + level), title, message, + location); + } else { + last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR, + LOG_PREFIX_FORMAT " %s\n", + timestamp, *(level_marks + level), title, message); + } + ngx_write_fd(logger_data->file->fd, buffer, last - buffer); } - ngx_write_fd(logger_data->file->fd, buffer, last - buffer); +#undef LOG_PREFIX_FORMAT } static void -------------- next part -------------- HTML����������������������������...Download