Class: Groonga::Logger

Inherits:
Object
  • Object
show all
Defined in:
ext/rb-grn-logger.c,
ext/rb-grn-logger.c

Overview

groongaから出力されるログを記録するためのクラス。

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeObject



202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'ext/rb-grn-logger.c', line 202

static VALUE
rb_grn_logger_initialize (int argc, VALUE *argv, VALUE self)
{
    rb_grn_logger_info_wrapper *wrapper;
    grn_logger_info *logger;
    grn_log_level level;
    int flags = 0;
    VALUE options, rb_level, rb_time, rb_title, rb_message, rb_location;
    VALUE rb_handler;

    rb_scan_args(argc, argv, "01&", &options, &rb_handler);

    rb_grn_scan_options(options,
                        "level", &rb_level,
                        "time", &rb_time,
                        "title", &rb_title,
                        "message", &rb_message,
                        "location", &rb_location,
                        NULL);

    level = RVAL2GRNLOGLEVEL(rb_level);

    if (NIL_P(rb_time) || RVAL2CBOOL(rb_time))
        flags |= GRN_LOG_TIME;
    if (NIL_P(rb_title) || RVAL2CBOOL(rb_title))
        flags |= GRN_LOG_TITLE;
    if (NIL_P(rb_message) || RVAL2CBOOL(rb_message))
        flags |= GRN_LOG_MESSAGE;
    if (NIL_P(rb_location) || RVAL2CBOOL(rb_location))
        flags |= GRN_LOG_LOCATION;

    wrapper = ALLOC(rb_grn_logger_info_wrapper);
    logger = ALLOC(grn_logger_info);
    wrapper->logger = logger;
    DATA_PTR(self) = wrapper;

    logger->max_level = level;
    logger->flags = flags;
    rb_grn_logger_set_handler(self, rb_handler);

    return Qnil;
}

Class Method Details

.Groonga::Logger.register(options = {}) ⇒ Object

groongaがログを出力する度に呼び出されるブロックを登録す る。

ブロックに渡されてくる引数はlevel, time, title, message, locationの5つで、levelはSymbol、それ以外は 全て文字列で渡される。その4つについてはoptionsfalse を指定することでブロックに渡さないようにすることができ、 その場合は空文字列が実際には渡される。

optionsに指定可能な値は以下の通り。

:level

ログのレベルを:none, :emergency, :alert, :critical, :error, :warning, :notice, :info, :debug, :dumpのいずれかで指定する。それより重要度が 低いログはブロックに渡されなくなる。デフォルトでは :notice

:time

ログが出力された時間をブロックに渡したいならtrueを指 定する。デフォルトでは渡す。

:title

ログのタイトルをブロックに渡したいならtrueを指定す る。デフォルトでは渡す。(FIXME: groongaで実装されてい ない?)

:message

ログのメッセージをブロックに渡したいならtrueを指定す る。デフォルトでは渡す。

:location

ログの発生元のプロセスIDとgroongaのソースコードのファイ ル名、行番号、関数名をブロックに渡したいならtrueを指 定する。デフォルトでは渡す。



286
287
288
289
290
291
292
293
294
295
296
297
298
299
# File 'ext/rb-grn-logger.c', line 286

static VALUE
rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
{
    VALUE logger;
    grn_rc  rc;

    logger = rb_funcall2(klass, rb_intern("new"), argc, argv);
    rb_grn_logger_set_handler(logger, rb_block_proc());
    rc = grn_logger_info_set(NULL, RVAL2GRNLOGGER(logger));
    rb_grn_rc_check(rc, logger);
    rb_cv_set(klass, "@@current_logger", logger);

    return Qnil;
}