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: