2

我想将应用程序 printf 日志消息传递到 /var/log/messages。因为 /var/log/messages 可以看到内核调试消息。但是我不知道如何将应用程序 printf 日志消息传递到 /var/log/messages。谁能建议我如何做到这一点。

4

1 回答 1

3

改变,例如:

printf("The error was %s\n", strerror(errno));

至:

syslog(LOG_ERR, "The error was %s", strerror(errno));

请注意,syslog 总是一次发送一个完整的行(并且不需要\n)。

要更好地控制您的日志记录选项,请openlog()在调用任何syslog(). 有关更多详细信息,请参阅 openlog 手册页。

Syslog 路由消息基于消息优先级——第一个参数到syslog(例如LOG_ERR在上面的示例中)——和设施。该设施要么在调用中设置,要么openlog()默认为LOG_USER. syslog 配置文件的基本语法是以下形式的行:

selector[;selector]     destination

其中选择器是:

facility[,facility].priority

(设施和/或优先级可以是通配符*)。优先级隐含地包括所有更高的优先级。

目标可以是一个文件、一个远程主机、一个程序或一个用户(列表)。一些例子:

*.*                   ihateyou             -- every message sent to this user
*.debug               *                    -- to every logged in user!
*.emerg               root,bob,tom         -- emergencies to these three
*.err                 /var/log/all-errors  -- all LOG_ERR and above to this file
cron.info             |/some/program       -- pipe these to /some/program
user.*                @some.host.com       -- send these to this host
cron,user.crit        /this/file           -- an example with multiple facilities
lpr.err;ftp.warn      /other/file          -- an example with multiple selectors

可能有一些额外的选项,(例如,“none”作为优先级,特定优先级如 =warn,以及否定如 !=warn),请参阅您的 syslog.conf 手册页以获取有关这些内容的详细信息。

查看您的系统日志配置文件(通常是 /etc/syslog.conf),了解您的系统如何路由其系统日志消息。注意:一些系统运行 syslog 的变体,例如nsyslogor rsyslog-- 它们有更多的选项,因此配置文件可能更复杂。

已知的设施有:LOG_AUTH、LOG_AUTHPRIV、LOG_CRON、LOG_DAEMON、LOG_FTP、LOG_KERN、LOCAL_LOCAL0 .. LOG_LOCAL7、LOG_LPR、LOG_MAIL、LOG_NEWS、LOG_SYSLOG、LOG_USER、LOG_UUCP。(LOG_KERN 对用户进程不可用) 通常,LOG_DAEMON、LOG_LOCAL n或 LOG_USER 之一通常是最佳选择。

已知的优先级(也称为严重性)是(从最高到最低):LOG_EMERG、LOG_ALERT、LOG_CRIT、LOG_ERR、LOG_WARNING、LOG_NOTICE、LOG_INFO、LOG_DEBUG。

于 2015-12-17T22:20:07.310 回答