1 /*-------------------------------------------------------------------------
4 * Exports from postmaster/syslogger.c.
6 * Copyright (c) 2004-2008, PostgreSQL Global Development Group
10 *-------------------------------------------------------------------------
15 #include <limits.h> /* for PIPE_BUF */
19 * Primitive protocol structure for writing to syslogger pipe(s). The idea
20 * here is to divide long messages into chunks that are not more than
21 * PIPE_BUF bytes long, which according to POSIX spec must be written into
22 * the pipe atomically. The pipe reader then uses the protocol headers to
23 * reassemble the parts of a message into a single string. The reader can
24 * also cope with non-protocol data coming down the pipe, though we cannot
25 * guarantee long strings won't get split apart.
27 * We use non-nul bytes in is_last to make the protocol a tiny bit
28 * more robust against finding a false double nul byte prologue. But
29 * we still might find it in the len and/or pid bytes unless we're careful.
33 /* Are there any systems with PIPE_BUF > 64K? Unlikely, but ... */
35 #define PIPE_CHUNK_SIZE 65536
37 #define PIPE_CHUNK_SIZE ((int) PIPE_BUF)
39 #else /* not defined */
40 /* POSIX says the value of PIPE_BUF must be at least 512, so use that */
41 #define PIPE_CHUNK_SIZE 512
46 char nuls
[2]; /* always \0\0 */
47 uint16 len
; /* size of this chunk (counts data only) */
48 int32 pid
; /* writer's pid */
49 char is_last
; /* last chunk of message? 't' or 'f' ('T' or
50 * 'F' for CSV case) */
51 char data
[1]; /* data payload starts here */
56 PipeProtoHeader proto
;
57 char filler
[PIPE_CHUNK_SIZE
];
60 #define PIPE_HEADER_SIZE offsetof(PipeProtoHeader, data)
61 #define PIPE_MAX_PAYLOAD ((int) (PIPE_CHUNK_SIZE - PIPE_HEADER_SIZE))
65 extern bool Logging_collector
;
66 extern int Log_RotationAge
;
67 extern int Log_RotationSize
;
68 extern PGDLLIMPORT
char *Log_directory
;
69 extern PGDLLIMPORT
char *Log_filename
;
70 extern bool Log_truncate_on_rotation
;
72 extern bool am_syslogger
;
75 extern int syslogPipe
[2];
77 extern HANDLE syslogPipe
[2];
81 extern int SysLogger_Start(void);
83 extern void write_syslogger_file(const char *buffer
, int count
, int dest
);
86 extern void SysLoggerMain(int argc
, char *argv
[]);
89 #endif /* _SYSLOGGER_H */