PostgreSQL 不记录

Kok*_*zzu 7 postgresql log postgresql-9.4

我正在使用ArchLinuxPostgreSQL9.4.4 并在配置文件中启用了日志记录:

$ sudo egrep -v "^[[:blank:]]*($|#|//|/\*| \*|\*/)" /var/lib/postgres/data/postgresql.conf

max_connections = 1024          # (change requires restart)
shared_buffers = 128MB          # min 128kB
dynamic_shared_memory_type = posix  # the default is the first option
logging_collector = on      # Enable capturing of stderr and csvlog
log_directory = '/tmp'      # directory where log files are written,
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
log_file_mode = 0644            # creation mode for log files,
log_error_verbosity = verbose       # terse, default, or verbose messages
log_statement = 'all'           # none, ddl, mod, all
log_timezone = 'Asia/Jakarta'
datestyle = 'iso, dmy'
timezone = 'Asia/Jakarta'
lc_messages = 'en_CA.UTF-8'         # locale for system error message
lc_monetary = 'en_CA.UTF-8'         # locale for monetary formatting
lc_numeric = 'en_CA.UTF-8'          # locale for number formatting
lc_time = 'en_CA.UTF-8'             # locale for time formatting
default_text_search_config = 'pg_catalog.english'
Run Code Online (Sandbox Code Playgroud)

然后重新启动或重新加载服务:

sudo systemctl restart postgresql
sudo systemctl reload postgresql
Run Code Online (Sandbox Code Playgroud)

加载的设置:

postgres=# SELECT name, setting FROM pg_settings WHERE name LIKE '%log%';
            name             |            setting             
-----------------------------+--------------------------------
 log_autovacuum_min_duration | -1
 log_checkpoints             | off
 log_connections             | off
 log_destination             | stderr
 log_directory               | /tmp
 log_disconnections          | off
 log_duration                | off
 log_error_verbosity         | verbose
 log_executor_stats          | off
 log_file_mode               | 0644
 log_filename                | postgresql-%Y-%m-%d_%H%M%S.log
 log_hostname                | off
 log_line_prefix             | 
 log_lock_waits              | off
 log_min_duration_statement  | -1
 log_min_error_statement     | error
 log_min_messages            | warning
 log_parser_stats            | off
 log_planner_stats           | off
 log_rotation_age            | 1440
 log_rotation_size           | 10240
 log_statement               | all
 log_statement_stats         | off
 log_temp_files              | -1
 log_timezone                | Asia/Jakarta
 log_truncate_on_rotation    | off
 logging_collector           | on
 syslog_facility             | local0
 syslog_ident                | postgres
 wal_log_hints               | off
(30 rows)
Run Code Online (Sandbox Code Playgroud)

/tmp权限:

$ ll /tmp/ 
total 11656
drwxrwxrwt 22 root root       580 Jun 29 10:05 ./
drwxr-xr-x 17 root root      4096 Jun 10 08:04 ../
...
Run Code Online (Sandbox Code Playgroud)

/tmp用法:

$ df | grep /tmp
tmpfs            8159996    31204   8128792   1% /tmp
Run Code Online (Sandbox Code Playgroud)

对 进行一些查询psql,但/tmp/postgresql-*仍然没有显示。我该怎么做才能找到阻止创建日志的部分?

编辑 1

的结果 journalctl -u postgresql

Oct 08 09:13:53 xxx postgres[19861]: LOG:  00000: redirecting log output to logging collector process
Oct 08 09:13:53 xxx postgres[19861]: HINT:  Future log output will appear in directory "/tmp".
Oct 08 09:13:53 xxx postgres[19861]: LOCATION:  SysLogger_Start, syslogger.c:645
Oct 08 09:13:55 xxx systemd[1]: Started PostgreSQL database server.
Run Code Online (Sandbox Code Playgroud)

And*_*mar 3

日志记录收集器尝试捕获stderr并将其写入文件。但看起来 systemd 赢得了重定向战争,并将输出发送到日志。您可以使用以下命令检查 systemd 日志:

journalctl -u postgresql
Run Code Online (Sandbox Code Playgroud)

systemd 配置位于usr/lib/systemd/system/postgresql.service. 我已经尝试了各种设置StandardError,但似乎没有一个允许常规 Postgres 日志记录完成其工作。

  • 当 /tmp 上的权限为“drwxrwxrwt”时,如图所示,这意味着每个用户都可以对其进行写入(最右边的“w”对应于其他用户),这是正常情况。这里没有什么问题。 (3认同)