Kouhei Sutou
null+****@clear*****
Wed Nov 2 16:20:19 JST 2016
Kouhei Sutou 2016-11-02 16:20:19 +0900 (Wed, 02 Nov 2016) New Revision: ba413e3ede33ee2e9934281440593a9b07f73261 https://github.com/groonga/groonga/commit/ba413e3ede33ee2e9934281440593a9b07f73261 Message: Support PID output to log It's enabled by default in groonga-httpd. Because it uses multi-process model. It's not enabled for groonga command. Because it uses single-process multi-thread model. GRN_LOG_PID is added for enabling this feature. If GRN_LOG_PID is specified, log format is changed: Before: TIMESTAMP|MARK| MESSAGE After: TIMESTAMP|MARK|PID: MESSAGE Modified files: include/groonga/groonga.h lib/logger.c src/httpd/nginx-module/ngx_http_groonga_module.c Modified: include/groonga/groonga.h (+1 -0) =================================================================== --- include/groonga/groonga.h 2016-11-02 12:34:52 +0900 (42e5baf) +++ include/groonga/groonga.h 2016-11-02 16:20:19 +0900 (57265f9) @@ -1020,6 +1020,7 @@ GRN_API grn_rc grn_snip_get_result(grn_ctx *ctx, grn_obj *snip, const unsigned i #define GRN_LOG_TITLE (0x01<<1) #define GRN_LOG_MESSAGE (0x01<<2) #define GRN_LOG_LOCATION (0x01<<3) +#define GRN_LOG_PID (0x01<<4) /* Deprecated since 2.1.2. Use grn_logger instead. */ typedef struct _grn_logger_info grn_logger_info; Modified: lib/logger.c (+13 -4) =================================================================== --- lib/logger.c 2016-11-02 12:34:52 +0900 (3135c14) +++ lib/logger.c 2016-11-02 16:20:19 +0900 (7861e4a) @@ -155,13 +155,19 @@ default_logger_log(grn_ctx *ctx, grn_log_level level, } } if (default_logger_file) { + char label = *(slev + level); int written; if (location && *location) { - written = fprintf(default_logger_file, "%s|%c|%s %s %s\n", - timestamp, *(slev + level), title, message, location); + if (title && *title) { + written = fprintf(default_logger_file, "%s|%c|%s: %s %s\n", + timestamp, label, location, title, message); + } else { + written = fprintf(default_logger_file, "%s|%c|%s: %s\n", + timestamp, label, location, message); + } } else { - written = fprintf(default_logger_file, "%s|%c|%s %s\n", timestamp, - *(slev + level), title, message); + written = fprintf(default_logger_file, "%s|%c|%s %s\n", + timestamp, label, title, message); } if (written > 0) { default_logger_size += written; @@ -394,6 +400,9 @@ grn_logger_putv(grn_ctx *ctx, if (current_logger.flags & GRN_LOG_LOCATION) { grn_snprintf(lbuf, LBUFSIZE, LBUFSIZE, "%d %s:%d %s()", getpid(), file, line, func); + } else if (current_logger.flags & GRN_LOG_PID) { + grn_snprintf(lbuf, LBUFSIZE, LBUFSIZE, + "%d", getpid()); } else { lbuf[0] = '\0'; } Modified: src/httpd/nginx-module/ngx_http_groonga_module.c (+21 -46) =================================================================== --- src/httpd/nginx-module/ngx_http_groonga_module.c 2016-11-02 12:34:52 +0900 (ceee965) +++ src/httpd/nginx-module/ngx_http_groonga_module.c 2016-11-02 16:20:19 +0900 (6b00b21) @@ -182,65 +182,40 @@ ngx_http_groonga_logger_log(grn_ctx *ctx, grn_log_level level, void *user_data) { ngx_open_file_t *file = user_data; - const char level_marks[] = " EACewnid-"; + 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; if (!file) { return; } -#define LOG_PREFIX_FORMAT "%s|%c|%s" - prefix_size = - strlen(timestamp) + - 1 /* | */ + - 1 /* %c */ + - 1 /* | */ + - strlen(title) + - 1 /* a space */; - message_size = strlen(message); + ngx_http_groonga_write_fd(file->fd, + buffer, NGX_MAX_ERROR_STR, + timestamp, strlen(timestamp)); + ngx_write_fd(file->fd, "|", 1); + ngx_write_fd(file->fd, level_marks + level, 1); + ngx_write_fd(file->fd, "|", 1); if (location && *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, - LOG_PREFIX_FORMAT, - timestamp, *(level_marks + level), title); - ngx_write_fd(file->fd, buffer, last - buffer); ngx_http_groonga_write_fd(file->fd, buffer, NGX_MAX_ERROR_STR, - message, message_size); - if (location_size > 0) { - ngx_write_fd(file->fd, " ", 1); + location, strlen(location)); + ngx_write_fd(file->fd, ": ", 2); + if (title && *title) { ngx_http_groonga_write_fd(file->fd, buffer, NGX_MAX_ERROR_STR, - location, location_size); + title, strlen(title)); + ngx_write_fd(file->fd, " ", 1); } - ngx_write_fd(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(file->fd, buffer, last - buffer); + ngx_http_groonga_write_fd(file->fd, + buffer, NGX_MAX_ERROR_STR, + title, strlen(title)); + ngx_write_fd(file->fd, " ", 1); } -#undef LOG_PREFIX_FORMAT + ngx_http_groonga_write_fd(file->fd, + buffer, NGX_MAX_ERROR_STR, + message, strlen(message)); + ngx_write_fd(file->fd, "\n", 1); } static void @@ -258,7 +233,7 @@ ngx_http_groonga_logger_fin(grn_ctx *ctx, void *user_data) static grn_logger ngx_http_groonga_logger = { GRN_LOG_DEFAULT_LEVEL, - GRN_LOG_TIME | GRN_LOG_MESSAGE, + GRN_LOG_TIME | GRN_LOG_MESSAGE | GRN_LOG_PID, NULL, ngx_http_groonga_logger_log, ngx_http_groonga_logger_reopen, -------------- next part -------------- HTML����������������������������... ダウンロード