[pgsql-ru-general] Запись логов в сокет вместо файла? - Mailing list pgsql-ru-general

From Д.П.
Subject [pgsql-ru-general] Запись логов в сокет вместо файла?
Date
Msg-id a11ad8cd-cf29-e5f6-05c1-eda4694d08a3@yandex.ru
Whole thread Raw
Responses [pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла?  (Виктор Вислобоков <corochoone@gmail.com>)
[pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла?  (Nikolay Samokhvalov <samokhvalov@gmail.com>)
Re: [pgsql-ru-general] Запись логов в сокет вместо файла?  ("Dmitry E. Oboukhov" <unera@debian.org>)
List 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 by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: [pgsql-ru-general] Re: [pgsql-ru-general] duplicate key value violates unique constraint и создание дублей
Next
From: Виктор Вислобоков
Date:
Subject: [pgsql-ru-general] Re: [pgsql-ru-general] Запись логов в сокет вместо файла?