如何将应用程序printf消息传递给/ var / log / messages

时间:2015-12-17 17:39:21

标签: c kernel printk printf-debugging

我想将应用程序printf日志消息传递给/ var / log / messages。 因为/var/log/messages可以看到内核调试消息。但是我没有得到如何将应用程序printf日志消息传递给/ var / log / messages。 任何人都可以建议我如何做到这一点。

1 个答案:

答案 0 :(得分: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

其中selector是:

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的变体,如nsyslogrsyslog - 它们有更多选项,因此可能是更复杂的配置文件。

已知的设施有: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。