我想将应用程序printf日志消息传递给/ var / log / messages。 因为/var/log/messages可以看到内核调试消息。但是我没有得到如何将应用程序printf日志消息传递给/ var / log / messages。 任何人都可以建议我如何做到这一点。
答案 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的变体,如nsyslog
或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。