我有一个小的代码来发送消息到系统日志使用C Api的,当无法连接到postgres数据库。
int main ( int argc, char **argv ) { PGconn *psql; PGresult *res; int flag = 0; openlog ( "postgres", LOG_NDELAY, LOG_SYSLOG ); psql = PQconnectdb("hostaddr = '127.0.0.0' port = '5432' dbname = 'RtpDb' user = 'rtp_user_99' password = 'rtp_user' connect_timeout = '10'"); if ( PQstatus(psql) != CONNECTION_OK ) { //Send an event to syslog for DB Connection Failure syslog (LOG_EMERG, "%s", PQerrorMessage(psql) ) } closelog (); PQclear(res); PQfinish(psql); }
当postgres数据库发生连接失败时,即使未在openlog中启用选项LOG_CONS,也会将消息打印到控制台上。
Broadcast message from systemd-journald@blr09 (Tue 2017-01-03 05:24:46 EST): postgres[40933]: could not connect to server: Network is unreachable Is the server running on host "127.0.0.0" and accepting TCP/IP connections on port 5432? Message from syslogd@blr09 at Jan 3 05:24:46 ... postgres:could not connect to server: Network is unreachable#012#011Is the server running on host "127.0.0.0" and accepting#012#011TCP/IP connections on port 5432?
你能帮我如何避免在控制台上打印的消息。
@alk提供的提示后,我做了一些更多的研究,并发现如何避免在控制台上打印的消息。
Broadcast message from systemd-journald@blr09 (Tue 2017-01-03 05:24:46 EST): postgres[40933]: could not connect to server: Network is unreachable Is the server running on host "127.0.0.0" and accepting TCP/IP connections on port 5432? Message from syslogd@blr09 at Jan 3 05:24:46 ... postgres:could not connect to server: Network is unreachable#012#011Is the server running on host "127.0.0.0" and accepting#012#011TCP/IP connections on port 5432?
上面的消息有两个部分:
来自systemd-journald的广播消息=>这些消息将在发送紧急消息时由journalctl打印在控制台上。 要禁用这些消息,我们需要在/etc/systemd/journald.conf中禁用ForwardToWall即ForwardToWall = no
来自syslogd的消息=>这些消息由rsyslog打印,因为/etc/rsyslog.conf中的以下配置行
.emerg:omusrmsg:
这个选择器动作指出: “紧急消息通常会发送给所有当前在线的用户,通知他们系统正在发生一些奇怪的事情。要指定这个墙(1),使用”:omusrmsg:*“。 注释这条线。
执行上述操作之后,消息不会被打印在控制台上。 由于安全威胁,这些行动是不允许的,我正在提高警报优先事件。
syslog ( LOG_ALERT, "%s", PQerrorMessage(psql) );
感谢@alk。