static ngx_int_t ngx_http_groonga_context_init_query_logger(grn_ctx *context, ngx_http_groonga_loc_conf_t *location_conf, ngx_pool_t *pool, ngx_log_t *log) { ngx_http_groonga_query_logger_data_t *query_logger_data; if (!location_conf->query_log_file) { return NGX_OK; } query_logger_data = ngx_pcalloc(pool, sizeof(ngx_http_groonga_query_logger_data_t)); if (!query_logger_data) { ngx_log_error(NGX_LOG_ERR, log, 0, "http_groonga: failed to allocate memory for query logger"); return NGX_ERROR; } query_logger_data->pool = pool; query_logger_data->file = location_conf->query_log_file; query_logger_data->path = &(location_conf->query_log_path); ngx_http_groonga_query_logger.user_data = query_logger_data; grn_query_logger_set(context, &ngx_http_groonga_query_logger); return NGX_OK; }
static ngx_int_t ngx_http_groonga_context_init_query_logger(ngx_http_groonga_loc_conf_t *location_conf, ngx_pool_t *pool, ngx_log_t *log) { ngx_http_groonga_query_logger.user_data = location_conf->query_log_file; grn_query_logger_set(context, &ngx_http_groonga_query_logger); return NGX_OK; }
static void ngx_http_groonga_handler_cleanup(void *user_data) { ngx_http_groonga_handler_data_t *data = user_data; grn_ctx *context; if (!data->initialized) { return; } context = &(data->context); GRN_OBJ_FIN(context, &(data->head)); GRN_OBJ_FIN(context, &(data->body)); GRN_OBJ_FIN(context, &(data->foot)); grn_logger_set(context, NULL); grn_query_logger_set(context, NULL); grn_ctx_fin(context); }
static VALUE rb_grn_query_logger_s_unregister (VALUE klass) { VALUE current_logger; VALUE rb_context = Qnil; grn_ctx *context; current_logger = rb_cv_get(klass, "@@current_logger"); if (NIL_P(current_logger)) return Qnil; rb_cv_set(klass, "@@current_logger", Qnil); context = rb_grn_context_ensure(&rb_context); grn_query_logger_set(context, NULL); rb_grn_context_check(context, klass); return Qnil; }
/* * Registers a query logger or a callback that is called when a * query log event is emitted. * * @overload register(logger, options={}) * @param logger [#log, #reopen, #fin] The query logger. It is easy to * inherit {QueryLogger}. * * @!macro query-logger.register.options * @param options [::Hash] The options. * @option options [Symbol, String, Integer or nil] :flags (:default) * Flags describe what query log should be logged. * * If `flags` is String, it is parsed by {QueryLogger::Flags.parse}. * * @return void * * @overload register(options={}) * @yield [action, flag, timestamp, info, message] * ... * * @!macro query-logger.register.options */ static VALUE rb_grn_query_logger_s_register (int argc, VALUE *argv, VALUE klass) { VALUE rb_context = Qnil; grn_ctx *context; VALUE rb_logger, rb_callback; VALUE rb_options, rb_command, rb_result_code, rb_destination; VALUE rb_cache, rb_size, rb_score, rb_default, rb_all, rb_flags; unsigned int flags = GRN_QUERY_LOG_NONE; rb_scan_args(argc, argv, "02&", &rb_logger, &rb_options, &rb_callback); if (rb_block_given_p()) { rb_logger = rb_funcall(cGrnCallbackQueryLogger, id_new, 1, rb_callback); } rb_grn_scan_options(rb_options, "command", &rb_command, "result_code", &rb_result_code, "destination", &rb_destination, "cache", &rb_cache, "size", &rb_size, "score", &rb_score, "default", &rb_default, "all", &rb_all, "flags", &rb_flags, NULL); if (RVAL2CBOOL(rb_command)) { flags |= GRN_QUERY_LOG_COMMAND; } if (RVAL2CBOOL(rb_result_code)) { flags |= GRN_QUERY_LOG_RESULT_CODE; } if (RVAL2CBOOL(rb_destination)) { flags |= GRN_QUERY_LOG_DESTINATION; } if (RVAL2CBOOL(rb_cache)) { flags |= GRN_QUERY_LOG_CACHE; } if (RVAL2CBOOL(rb_size)) { flags |= GRN_QUERY_LOG_SIZE; } if (RVAL2CBOOL(rb_score)) { flags |= GRN_QUERY_LOG_SCORE; } if (RVAL2CBOOL(rb_default)) { flags |= GRN_QUERY_LOG_DEFAULT; } if (RVAL2CBOOL(rb_all)) { flags |= GRN_QUERY_LOG_ALL; } if (!NIL_P(rb_flags)) { flags = rb_funcall(mGrnQueryLoggerFlags, id_parse, 2, rb_flags, UINT2NUM(flags)); } rb_grn_query_logger.flags = flags; rb_grn_query_logger.user_data = (void *)rb_logger; context = rb_grn_context_ensure(&rb_context); grn_query_logger_set(context, &rb_grn_query_logger); rb_grn_context_check(context, rb_logger); rb_cv_set(klass, "@@current_logger", rb_logger); return Qnil; }