The following code tries to compare the performance of syslog()
with the printf()
command. [download id=”3787″]
On our machine, it appears that syslog()
is faster than printf()
.
To be as fair as possible, when the application was executing, we were monitoring the system logs as well, so that they will be printed on screen.
On CentOS 7
, you can see the syslog
in the file /var/log/messages
.
The command we used was: sudo tail -f /var/log/messages
Results:
printf: Seconds elapsed 0.480000
syslog: Seconds elapsed 0.180000
Full source code for test:
[download id=”3787″]
#include <stdio.h>
#include <syslog.h>
// #include <stdlib.h> is needed for the resolution of EXIT_SUCCESS
#include <stdlib.h>
// #include <time.h> is needed for the clock() function and the macro CLOCKS_PER_SEC
#include <time.h>
// #include <unistd.h> and #include <sys/types.h> are needed for the functions uid_t getuid(void); and uid_t geteuid(void);
//getuid() returns the real user ID of the calling process.
//geteuid() returns the effective user ID of the calling process.
//These functions are always successful.
#include <unistd.h>
#include <sys/types.h>
#define RANGE (100000)
int main()
{
{
const clock_t start = clock();
unsigned int i;
for (i = 0; i < RANGE; i++){
printf ("Program started by Real User %u (Effective User %u)\n", getuid(), geteuid());
}
printf("\n");
const clock_t end = clock();
const float seconds = (float) (end - start) / CLOCKS_PER_SEC;
printf("printf: Seconds elapsed %f\n", seconds);
}
{
const clock_t start = clock();
setlogmask (LOG_UPTO (LOG_NOTICE));
openlog ("bytefreaks", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
unsigned int i;
for (i = 0; i < RANGE; i++){
syslog (LOG_NOTICE, "Program started by Real User %u (Effective User %u)", getuid(), geteuid());
}
closelog ();
const clock_t end = clock();
const float seconds = (float) (end - start) / CLOCKS_PER_SEC;
printf("syslog: Seconds elapsed %f\n", seconds);
}
return EXIT_SUCCESS;
}
[download id=”3787″]