[pgsql-ru-general] Запись логов в сокет вместо файла?
От | Д.П. |
---|---|
Тема | [pgsql-ru-general] Запись логов в сокет вместо файла? |
Дата | |
Msg-id | a11ad8cd-cf29-e5f6-05c1-eda4694d08a3@yandex.ru обсуждение исходный текст |
Ответы |
[pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла?
[pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла? Re: [pgsql-ru-general] Запись логов в сокет вместо файла? |
Список | pgsql-ru-general |
Всем привет. Понадобилось логировать обращения к определённым полям определённых таблиц. Именно SELECT. Всё, что нашёл по этому поводу - включить запись всех команд в сислог. Но у сислога есть одна особенность - он может выкинуть лишнее при слишком высокой нагрузке. А по полученному ТЗ - "пусть мир подождёт". И я подумал, а можно ли повесить свой обработчик и заставить писать postgres в него через сокет? Т.е. я создаю юниксовый сокет и прошу постгрес писать туда логи, не? Первый эксперимент не удался. Не пришло ничего вообще. Если меняю log_destination = 'syslog' то все команды логируются. сен 01 10:51:51 sandbox postgres[10271]: [4-1] СООБЩЕНИЕ: оператор: select manana from kukara4a; сен 01 10:51:51 sandbox postgres[10271]: [5-1] СООБЩЕНИЕ: продолжительность: 1.051 мс Поэтому прошу помощи и совета - или я желаю странного, или оно как-то по хитрому может быть включено? //Дмитрий Настройки: log_destination = 'csvlog' log_filename = '/tmp/access.pglog.sock' logging_collector = on log_statement = 'all' log_min_error_statement = 'info' log_min_duration_statement = 0 log_lock_waits = on log_rotation_size = 0 logging_collector = on Скриптик: #!/usr/bin/env ruby # encoding: UTF-8 socket_name = ARGV[0] || '/tmp/access.pglog.sock' begin File.unlink socket_name rescue end require 'socket' require 'syslog/logger' log ||= Syslog::Logger.new 'access.pglog' server = UNIXServer.new socket_name File.chmod 0777, socket_name loop do socket = server.accept while line = socket.readline log.info line # дада, пишем в сислог. # тут на самом деле несколько регулярок end end socket.close
В списке pgsql-ru-general по дате отправления: