Spec-Zone.ru › Ruby 2.4

модуль Syslog

Пакет syslog предоставляет Ruby-интерфейс к системной утилите журналирования POSIX.

Сообщения Syslog обычно передаются центральному демону журналирования. Демон может их фильтровать; направлять в различные файлы (обычно в /var/log); помещать в базы данных SQL; пересылать на централизованные серверы журналирования по TCP или UDP; или даже оповещать администратора системы по электронной почте, пейджеру или текстовым сообщениям.

В отличие от журналирования на уровне приложения с помощью Logger или Log4r, syslog разработан для обеспечения защищённого и неуязвимого к подделке журналирования.

Протокол syslog стандартизирован в RFC 5424.

Методы Публичного Класса

close() Показать исходный код
static VALUE mSyslog_close(VALUE self)
{
    if (!syslog_opened) {
        rb_raise(rb_eRuntimeError, "syslog not opened");
    }

    closelog();

    xfree((void *)syslog_ident);
    syslog_ident = NULL;
    syslog_options = syslog_facility = syslog_mask = -1;
    syslog_opened = 0;

    return Qnil;
}

Закрывает системное средство журналирования Syslog. Выбрасывает исключение runtime, если оно не открыто.

facility() Показать исходный код
static VALUE mSyslog_facility(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_facility) : Qnil;
}

Возвращает номер объекта, используемый в последнем вызове open().

ident() Показать исходный код
static VALUE mSyslog_ident(VALUE self)
{
    return syslog_opened ? rb_str_new2(syslog_ident) : Qnil;
}

Возвращает строку идентификатора, используемую в последнем вызове open().

inspect() Показать исходный код
static VALUE mSyslog_inspect(VALUE self)
{
    Check_Type(self, T_MODULE);

    if (!syslog_opened)
        return rb_sprintf("<#%"PRIsVALUE": opened=false>", self);

    return rb_sprintf("<#%"PRIsVALUE": opened=true, ident=\"%s\", options=%d, facility=%d, mask=%d>",
                      self,
                      syslog_ident,
                      syslog_options,
                      syslog_facility,
                      syslog_mask);
}

Возвращает строку inspect(), обобщающую состояние объекта.

instance() Показать исходный код
static VALUE mSyslog_instance(VALUE self)
{
    return self;
}

Возвращает self для обеспечения обратной совместимости.

log(priority, format_string, *format_args) Показать исходный код
static VALUE mSyslog_log(int argc, VALUE *argv, VALUE self)
{
    VALUE pri;

    rb_check_arity(argc, 2, UNLIMITED_ARGUMENTS);

    argc--;
    pri = *argv++;

    if (!FIXNUM_P(pri)) {
        rb_raise(rb_eTypeError, "type mismatch: %"PRIsVALUE" given", rb_obj_class(pri));
    }

    syslog_write(FIX2INT(pri), argc, argv);

    return self;
}

Записывает сообщение с указанным приоритетом. Пример:

Syslog.log(Syslog::LOG_CRIT, "Out of disk space")
Syslog.log(Syslog::LOG_CRIT, "User %s logged in", ENV['USER'])

Уровни приоритета, в порядке убывания:

LOG_EMERG

Система непригодна для использования

LOG_ALERT

Необходимо немедленно принять меры

LOG_CRIT

Произошла критическая ситуация

LOG_ERR

Произошла ошибка

LOG_WARNING

Предупреждение о возможной проблеме

LOG_NOTICE

Произошло нормальное, но важное событие

LOG_INFO

Информационное сообщение

LOG_DEBUG

Отладочная информация

Каждый уровень приоритета также имеет метод-короткую запись, который записывает его с соответствующим приоритетом. Например, два следующих выражения дадут один и тот же результат:

Syslog.log(Syslog::LOG_ALERT, "Out of memory")
Syslog.alert("Out of memory")

Строки форматирования аналогичны printf/sprintf, за исключением того, что, помимо прочего, %m заменяется строкой сообщения об ошибке, которая возвращалась бы функцией strerror(errno).

mask() Показать исходный код
static VALUE mSyslog_get_mask(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_mask) : Qnil;
}

Возвращает маску приоритета журналирования, действующую в данный момент. Маска не сбрасывается при открытии или закрытии syslog.

mask=(priority_mask) Показать исходный код
static VALUE mSyslog_set_mask(VALUE self, VALUE mask)
{
    if (!syslog_opened) {
        rb_raise(rb_eRuntimeError, "must open syslog before setting log mask");
    }

    setlogmask(syslog_mask = NUM2INT(mask));

    return mask;
}

Устанавливает маску приоритета журналирования. Для упрощения установки значений маски определён метод LOG_UPTO. Пример:

Syslog.mask = Syslog::LOG_UPTO(Syslog::LOG_ERR)

Альтернативно, определённые приоритеты могут быть выбраны и объединены с помощью побитового ИЛИ. Пример:

Syslog.mask = Syslog::LOG_MASK(Syslog::LOG_ERR) | Syslog::LOG_MASK(Syslog::LOG_CRIT)

Маска приоритета сохраняется между вызовами open() и close().

open(ident, options, facility) → syslog Показать исходный код
static VALUE mSyslog_open(int argc, VALUE *argv, VALUE self)
{
    VALUE ident, opt, fac;
    const char *ident_ptr;

    if (syslog_opened) {
        rb_raise(rb_eRuntimeError, "syslog already open");
    }

    rb_scan_args(argc, argv, "03", &ident, &opt, &fac);

    if (NIL_P(ident)) {
        ident = rb_gv_get("$0");
    }
    ident_ptr = StringValueCStr(ident);
    rb_check_safe_obj(ident);
    syslog_ident = strdup(ident_ptr);

    if (NIL_P(opt)) {
        syslog_options = LOG_PID | LOG_CONS;
    } else {
        syslog_options = NUM2INT(opt);
    }

    if (NIL_P(fac)) {
        syslog_facility = LOG_USER;
    } else {
        syslog_facility = NUM2INT(fac);
    }

    openlog(syslog_ident, syslog_options, syslog_facility);

    syslog_opened = 1;

    setlogmask(syslog_mask = setlogmask(0));

    /* be like File.new.open {...} */
    if (rb_block_given_p()) {
        rb_ensure(rb_yield, self, mSyslog_close, self);
    }

    return self;
}

Открывает системное средство журналирования Syslog. Выбрасывает исключение runtime, если оно уже открыто.

Может вызываться с блоком кода или без него. Если вызывается с блоком кода, объект Syslog, созданный в этом блоке, передаётся в блок.

Если syslog уже открыт, вызывается RuntimeError.

ident — строка, идентифицирующая вызывающую программу.

options — логическое ИЛИ любых из следующих:

LOG_CONS

Если при отправке в системный лог произошла ошибка, запись выполняется непосредственно в консоль.

LOG_NDELAY

Открытие соединения происходит сразу, а не ожидая первого сообщения.

LOG_NOWAIT

Не ждать создание каких-либо дочерних процессов во время записи сообщений в лог. (Не оказывает влияния на Linux.)

LOG_ODELAY

Противоположность LOG_NDELAY; ожидание записи сообщения перед открытием соединения. (Это значение по умолчанию.)

LOG_PERROR

Вывод сообщения в stderr, а также отправка в syslog. (Не в POSIX.1-2001.)

LOG_PID

Включить текущий идентификатор процесса в каждое сообщение.

facility описывает тип программы, открывающей syslog, и является логическим ИЛИ любых из следующих значений, определённых для операционной системы:

LOG_AUTH

Безопасность или авторизация. Устарело, используйте LOG_AUTHPRIV вместо этого.

LOG_AUTHPRIV

Сообщения о безопасности или авторизации, которые должны оставаться конфиденциальными.

LOG_CONSOLE

Сообщение системной консоли.

LOG_CRON

Система планирования задач (cron или at).

LOG_DAEMON

Системный демон, не имеющий собственного значения объекта.

LOG_FTP

Сервер FTP.

LOG_KERN

Сообщение ядра (не отправляемое пользовательскими процессами, поэтому не очень полезно для Ruby, но указано здесь для полноты).

LOG_LPR

Подсистема принтера.

LOG_MAIL

Подсистема доставки или передачи почты.

LOG_NEWS

Система Usenet новостей.

LOG_NTP

Сервер протокола времени сети.

LOG_SECURITY

Общее сообщение о безопасности.

LOG_SYSLOG

Сообщения, сгенерированные syslog внутри.

LOG_USER

Общее сообщение на уровне пользователя.

LOG_UUCP

Подсистема UUCP.

LOG_LOCAL0 to LOG_LOCAL7

Локально определённые объекты.

Пример:

Syslog.open("webrick", Syslog::LOG_PID,
            Syslog::LOG_DAEMON | Syslog::LOG_LOCAL3)
reopen(ident, options, facility) → syslog Показать исходный код
static VALUE mSyslog_reopen(int argc, VALUE *argv, VALUE self)
{
    mSyslog_close(self);

    return mSyslog_open(argc, argv, self);
}

Закрывает и затем повторно открывает syslog.

Аргументы аналогичны аргументам open().

opened? Показать исходный код
static VALUE mSyslog_isopen(VALUE self)
{
    return syslog_opened ? Qtrue : Qfalse;
}

Возвращает true, если syslog открыт.

options() Показать исходный код
static VALUE mSyslog_options(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_options) : Qnil;
}

Возвращает битовую маску опций, используемую в последнем вызове open().

reopen(ident, options, facility) → syslog Показать исходный код
static VALUE mSyslog_reopen(int argc, VALUE *argv, VALUE self)
{
    mSyslog_close(self);

    return mSyslog_open(argc, argv, self);
}

Закрывает и затем повторно открывает syslog.

Аргументы аналогичны аргументам open().

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API