C/C++: Comparing the performance of syslog vs printf
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″]