Re: Syslog and pg_options (for RPMs) - Mailing list pgsql-hackers
| From | ncm@zembu.com (Nathan Myers) |
|---|---|
| Subject | Re: Syslog and pg_options (for RPMs) |
| Date | |
| Msg-id | 20010209191217.H624@store.zembu.com Whole thread Raw |
| In response to | Re: Syslog and pg_options (for RPMs) ("Dominic J. Eidson" <sauron@the-infinite.org>) |
| Responses |
Re: Syslog and pg_options (for RPMs)
|
| List | pgsql-hackers |
Here's the latest version of the pg_logger utility.
The particular questions that come to my mind are:
1. Do the prefixes it watches for match what PG produces?
2. Should it log to LOG_LOCAL1 or to some other LOG_LOCALn?
3. Is the ident string ("postgresql") right?
4. Are the openlog() args right? (E.g. should it ask for LOG_PID too?)
5. What am I failing to ask about?
I'd like to turn it over to whoever can answer those questions.
Nathan Myers
ncm@zembu.com
-----------------
/* pg_logger: stdin-to-syslog gateway for postgresql.** Copyright 2001 by Nathan Myers <ncm@nospam.cantrip.org>* This
softwareis distributed free of charge with no warranty of any kind.* You have permission to make copies for any
purpose,provided that (1) * this copyright notice is retained unchanged, and (2) you agree to * absolve the author of
allresponsibility for all consequences arising * from any use. */
#include <stdio.h>
#include <stddef.h>
#include <syslog.h>
#include <string.h>
struct { char *name; int size; int priority;
} tags[] = { { "", 0, LOG_NOTICE }, { "emerg:", sizeof("emerg"), LOG_EMERG }, {
"alert:", sizeof("alert"), LOG_ALERT }, { "crit:", sizeof("crit"), LOG_CRIT }, { "err:",
sizeof("err"), LOG_ERR }, { "error:", sizeof("error"), LOG_ERR }, { "warning:", sizeof("warning"),
LOG_WARNING}, { "notice:", sizeof("notice"), LOG_NOTICE }, { "info:", sizeof("info"), LOG_INFO }, {
"debug:", sizeof("debug"), LOG_DEBUG }
};
int main()
{ char buf[301]; int c; char *pos = buf; const char *colon = 0;
#ifndef DEBUG openlog("postgresql", LOG_CONS, LOG_LOCAL1);
#endif while ( (c = getchar()) != EOF) { if (c == '\r') { continue; } if (c == '\n') {
int level = sizeof(tags)/sizeof(*tags); char *bol;
if (colon == 0 || (size_t)(colon - buf) > sizeof("warning")) { level = 1; }
*pos = 0; while (--level) { if (pos - buf >= tags[level].size && strncmp(buf,
tags[level].name,tags[level].size) == 0) { break; } } bol = buf +
tags[level].size; if (bol > buf && *bol == ' ') { ++bol; } if (pos - bol >
0){
#ifndef DEBUG syslog(tags[level].priority, "%s", bol);
#else printf("%d/%s\n", tags[level].priority, bol);
#endif } pos = buf; colon = (char const *)0; continue; } if (c ==
':'&& !colon) { colon = pos; } if ((size_t)(pos - buf) < sizeof(buf)-1) { *pos++ = c;
} } return 0;
}
pgsql-hackers by date: