我想将应用程序 printf 日志消息传递到 /var/log/messages。因为 /var/log/messages 可以看到内核调试消息。但是我不知道如何将应用程序 printf 日志消息传递到 /var/log/messages。谁能建议我如何做到这一点。
1 回答
改变,例如:
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 的变体,例如nsyslog
or 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。