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)  (Tom Lane <tgl@sss.pgh.pa.us>)
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:

Previous
From: Bruce Momjian
Date:
Subject: Link problems
Next
From: Tom Lane
Date:
Subject: Re: Syslog and pg_options (for RPMs)