[prev in list] [next in list] [prev in thread] [next in thread] 

List:       syslog-ng
Subject:    [syslog-ng] Re: syslog-ng, file source driver
From:       Bradley Urberg Carlson bradley () onvoy ! com
Date:       2000-03-01 23:33:16
[Download RAW message or body]

On Wed, 1 Mar 2000, Balazs Scheidler wrote:

> ops, this is a docbug. earlier syslog-ng was able to do this, but this maxed
> out CPU usage. It is not possible to decide whether new data arrived to a
> file using poll()

I do a tail-like operation and sleep a predetermined interval between
fgets.  If you set the pause high-enough, it doesn't take much CPU (but
then, the logfile is processed on bursts, and not so smoothly).

char *fileName = "/var/log/syslogfile";
FILE *fileDescriptor;
char *ptr;
char buffer[510];
/* sleep 30 seconds between log-file reads */
int sleepLength = 30;
/* 20 consecutive reads with no data = frozen log file */
int maxReads = 36;

int EOFile = 0; /* not yet at the end of the log file */
int whatever_procedure (void) {
	if ((fileDescriptor = fopen (fileName, "r")) == (FILE *) NULL)
	{
		fprintf (stderr, "Couldn't open logfile: %s\n", fileName);
		return (0);
	}
	/* if EOFile == 0, we're not at the end of the log file */
	/* if EOFile == 1, we're at the end of the file, and read good data */
	/* if EOFile > 1, it is the number of reads with no new data */
	for (;;) {
		while (fgets (buffer, sizeof (buffer), fileDescriptor) != (char *) NULL)
		{
			/* skip ahead to the end of the logfile */
			if (EOFile != 0) 
			{ /* now we're tailing the end of the logfile */
				EOFile = 1;
/* Now do whatever you want with the buffer[] that was read from the logfile */
			}
		}
		EOFile++;
		if (EOFile > maxReads) /* too many reads with no data, try reopening logfile */
		{
			fclose(fileDescriptor);
			if ((fileDescriptor = fopen (fileName, "r")) == (FILE *) NULL)
			{
				fprintf (stderr, "Couldn't open log file: %s\n", fileName);
				return (0);
			}
			EOFile = 0;
		}
		sleep (sleepLength);
	}
}

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic