Ruby&Syslog&自定义设施(Ruby & Syslog & custom facility)

编程入门 行业动态 更新时间:2024-10-26 19:29:29
Ruby&Syslog&自定义设施(Ruby & Syslog & custom facility)

我很新玩syslog。

我们决定使用syslog来跟踪Rails应用程序中的一些特殊事件。

问题是我不想使用默认的/var/log/system.log文件,而是使用像/var/log/myapp_events.log这样的自定义文件。

我明白了,为此我必须在/etc/syslog.conf定义我自己的工具,如下所示:

myapp_events.* /var/log/myapp_events.log

重新启动syslogd后,我发现我可以直接使用它进入bash控制台

syslog -s -k Facility myapp_events Message "this is my message"

该消息按预期出现在/var/log/myapp_events.log中,但我无法使用syslog ruby​​ gem重现此行为。 我努力了:

require 'syslog' Syslog.open('myapp_events', Syslog::LOG_PID | Syslog::LOG_CONS) { |s| s.warning 'this is my message' } # sends the message to system.log Syslog.open('myapp_events', Syslog::LOG_PID | Syslog::LOG_CONS, 'myapp_events') { |s| s.warning 'this is my message' } # error because 'myapp_event' can't be converted to int.

我看到Syslog.open有第三个参数,它是设施,但它必须是一个整数,而我拥有的是一个字符串。

任何建议?

I am very new playing with syslog.

We have decided to use syslog to track some special events in our Rails application.

The problem is that I don't want to use the default /var/log/system.log file but use a custom one like /var/log/myapp_events.log.

I see that for that I have to define my own facility in /etc/syslog.conf like this:

myapp_events.* /var/log/myapp_events.log

After restarting syslogd I see that I can play with it directly into the bash console:

syslog -s -k Facility myapp_events Message "this is my message"

The message appears into the /var/log/myapp_events.log as expected, but I cannot reproduce this behavior using the syslog ruby gem. I have tried:

require 'syslog' Syslog.open('myapp_events', Syslog::LOG_PID | Syslog::LOG_CONS) { |s| s.warning 'this is my message' } # sends the message to system.log Syslog.open('myapp_events', Syslog::LOG_PID | Syslog::LOG_CONS, 'myapp_events') { |s| s.warning 'this is my message' } # error because 'myapp_event' can't be converted to int.

I see that Syslog.open has a third argument which is the facility but it has to be an integer and what I have is a string.

Any suggestion?

最满意答案

绝对的syslog ruby实现不允许我们使用自定义设施

syslog ruby实现使用syslog [C实现]( http://github.com/ruby/ruby/blob/trunk/ext/syslog/syslog.c#L36 )。

syslog C实现只允许我们使用非常短的设施名称列表: LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, LOG_NEWS, LOG_UUCP, UUCP , LOG_CRON, LOG_AUTHPRIV, LOG_FTP, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7 。

所以最后我做的是使用其中一个已经在那里供个人使用的LOG_LOCALX设施。

现在我可以像这样配置syslog:

# /etc/syslog.conf local5.* /var/log/myapp_events.log

在Ruby中这样做:

Syslog.open('myapp', Syslog::LOG_PID, Syslog::LOG_LOCAL5) { |s| s.info 'this is my message' }

我认为这是syslog希望你定义自定义设施的方式

Definitely the syslog ruby implementation doesn't allow us to use custom facilities.

The syslog ruby implementation is using the syslog [C implementation] (http://github.com/ruby/ruby/blob/trunk/ext/syslog/syslog.c#L36).

The syslog C implementation only allows us to use a very short list of facility names: LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, LOG_NEWS, LOG_UUCP, UUCP , LOG_CRON, LOG_AUTHPRIV, LOG_FTP, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7.

So in the end what I did was to use one of the LOG_LOCALX facilities that are already there for personal use.

Now I can configure syslog like this:

# /etc/syslog.conf local5.* /var/log/myapp_events.log

And in Ruby do this:

Syslog.open('myapp', Syslog::LOG_PID, Syslog::LOG_LOCAL5) { |s| s.info 'this is my message' }

I think is the way that syslog wants you to define custom facilities.

更多推荐

本文发布于:2023-08-03 17:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1395158.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   设施   Syslog   Ruby   custom

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!