非常教程

Ruby 2.4参考手册

系统日志 | Syslog

Syslog

syslog软件包为POSIX系统日志记录工具提供了一个Ruby界面。

系统日志消息通常传递给中央日志记录守护进程。守护进程可能会过滤它们; 将它们路由到不同的文件中(通常在/ var / log下找到); 将它们放在SQL数据库中; 通过TCP或UDP将它们转发到集中式日志记录服务器; 甚至通过电子邮件,寻呼机或短信提醒系统管理员。

与通过Logger或Log4r进行的应用程序级日志记录不同,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;
}

facility() 显示源

返回上次调用open()时使用的工具编号

static VALUE mSyslog_facility(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_facility) : Qnil;
}

ident() 显示源

返回上次调用open()时使用的标识字符串

static VALUE mSyslog_ident(VALUE self)
{
    return syslog_opened ? rb_str_new2(syslog_ident) : Qnil;
}

inspect() 显示源

返回汇总对象状态的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);
}

instance()显示源

为了向后兼容,返回self。

static VALUE mSyslog_instance(VALUE self)
{
    return self;
}

log(priority, format_string, *format_args) 显示源

记录具有指定优先级的消息。例:

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)返回的错误消息字符串。

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;
}

mask() 显示源

返回有效的日志优先级掩码。掩码不会通过打开或关闭系统日志来重置。

static VALUE mSyslog_get_mask(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_mask) : Qnil;
}

mask=(priority_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()持续存在。

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;
}

open(ident, options, facility) → 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

在每条消息中包含当前进程ID。

facility 描述打开系统日志的程序的类型,并且是为主机操作系统定义的以下任何逻辑或:

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)
static VALUE mSyslog_open(int argc, VALUE *argv, VALUE self)
{
    VALUE ident, opt, fac;

    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");
    }
    SafeStringValue(ident);
    syslog_ident = strdup(RSTRING_PTR(ident));

    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;
}

reopen(ident, options, facility) → syslog Show source

关闭然后重新打开系统日志。

参数与open()相同。

static VALUE mSyslog_reopen(int argc, VALUE *argv, VALUE self)
{
    mSyslog_close(self);

    return mSyslog_open(argc, argv, self);
}

opened?显示来源

如果系统日志已打开,则返回true。

static VALUE mSyslog_isopen(VALUE self)
{
    return syslog_opened ? Qtrue : Qfalse;
}

options() 显示源

返回上次调用open()时使用的选项位掩码

static VALUE mSyslog_options(VALUE self)
{
    return syslog_opened ? INT2NUM(syslog_options) : Qnil;
}

reopen(ident, options, facility) → syslog 显示源

关闭然后重新打开系统日志。

参数与open()相同。

static VALUE mSyslog_reopen(int argc, VALUE *argv, VALUE self)
{
    mSyslog_close(self);

    return mSyslog_open(argc, argv, self);
}
Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct