[Groonga-commit] groonga/groonga at ba413e3 [master] Support PID output to log

アーカイブの一覧に戻る

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����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る