Ich verwende ArchLinux
und PostgreSQL
9.4.4 und habe die Protokollierung in der Konfigurationsdatei aktiviert:
$ 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'
Starten Sie dann den Dienst neu oder laden Sie ihn neu:
sudo systemctl restart postgresql
sudo systemctl reload postgresql
die geladenen Einstellungen:
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)
die /tmp
Erlaubnis:
$ ll /tmp/
total 11656
drwxrwxrwt 22 root root 580 Jun 29 10:05 ./
drwxr-xr-x 17 root root 4096 Jun 10 08:04 ../
...
die /tmp
Verwendung:
$ df | grep /tmp
tmpfs 8159996 31204 8128792 1% /tmp
Ich mache eine Abfrage psql
, aber die wird /tmp/postgresql-*
immer noch nicht angezeigt. Was kann ich tun, um herauszufinden, welches Teil die Erstellung eines Protokolls verhindert?
BEARBEITEN 1
das Ergebnis von 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.
postgresql
postgresql-9.4
log
Kokizzu
quelle
quelle
/tmp
? Ich verstehe jedoch nicht, warum es mit Ihrer gezeigten Konfiguration nicht funktionieren würde.postgres: logger process
?postgres: logger process
existiert aufps ax
AusgabeSELECT name, settings FROM pg_settings WHERE name LIKE 'log%'
?Antworten:
Der Protokollierungskollektor versucht, ihn zu erfassen
stderr
und in eine Datei zu schreiben. Aber es sieht so aus, als ob systemd den Umleitungskrieg gewinnt und die Ausgabe an das Journal sendet. Sie können das systemd-Journal überprüfen mit:Die Systemkonfiguration ist in
usr/lib/systemd/system/postgresql.service
. Ich habe verschiedene Einstellungen für ausprobiertStandardError
, aber keine scheint es der regulären Postgres-Protokollierung zu ermöglichen, ihre Arbeit zu erledigen.quelle
postgres
Benutzer/tmp/
problemlos auf unseren Hosts schreiben .sudo -u postgres echo hi > /tmp/test.txt
? Das läuftecho
als Postgres aber die Weiterleitung alsroot
. Die korrekte Syntax lautetsudo -u postgres bash -c 'echo hi > /tmp/test.txt'
und sollte den Fehler "Berechtigung verweigert" anzeigen.postgres
, kein Sudo nötig. Laufen die DB-Prozesse nicht grundsätzlich auf die gleiche Weise? Wie kommt das Öffnen einer neuen Shell in dieses Bild? (Beachten Sie, dass ich auf Ubuntu bin, aber das sollte keinen großen Unterschied machen, AFAIK.)drwxrwxrwt
wie gezeigt sind, bedeutet dies, dass jeder Benutzer darauf schreiben kann (ganz rechtsw
entsprechend anderen), was die normale Situation ist. Hier ist nichts falsch.$ sudo -u postgres echo hi > /tmp/test.txt
funktioniert gutcat /tmp/test.txt
gibthi
| Hier ist die journalctl Ausgabe:http://pastie.org/10264195