在我的 FreeBSD 11.2 机器上构建了 Postgres 11.1 后,我可以在哪里找到 Postgres 的日志输出。
具体来说,当第一次尝试启动 Postgres 时,我收到一条错误消息,提示pg_ctl
我检查日志以了解问题的解释。
$ /usr/local/bin/pg_ctl -D /var/db/postgres/data11 -l logfile start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.
在构建 Postgres 时,最终输出提到:
NB. FreeBSD's PostgreSQL port logs to syslog by default
See ~pgsql/data/postgresql.conf for more info
当我查看该文件时,关于日志的唯一条目是:
log_destination = '系统日志'
➥ 如何查询 syslog 中的 Postgres 日志?
答案1
首先,您必须为 PostgreSQL 创建一个专用的日志文件:
touch /var/log/postgresql.log
chown postgres:wheel /var/log/postgresql.log
chmod 640 /var/log/postgresql.log
之后,/etc/syslog.conf
通过添加如下条目,将更新并将消息从 PostgreSQL 重定向到刚刚创建的日志文件:
local0.* /var/log/postgresql.log
不要忘记重新启动 syslogd 来应用您的更改:
kill -HUP `cat /var/run/syslog.pid`
答案2
@taro 的答案是正确的方法,但不幸的是,添加一个过滤器local0.* /var/log/postgresql.log
会将所有 syslog local0 定向消息重定向到/var/log/postgresql.log
,包括来自其他应用程序和守护进程的输出。
正确的答案是添加特定的应用程序过滤器/etc/syslog.conf
或在中创建特定于 postgres 的 syslog 指令文件/etc/syslog.d/postgres.conf
(/usr/local/etc/syslog.d/postgres.conf
您可能需要/usr/local/etc/syslog.d
先创建目录)。
如果采用第一种方法,则需要将以下行添加到/etc/syslog.conf
:
postgres.* /var/log/postgresql.log
如果采用第二种方法(推荐),您可以postgres.conf
在其中一个syslog.d
目录中创建一个新文件,其中包含以下内容:
!postgres
*.* /var/log/postgresql.log