Commit 7f7077f5566e11ee5ac98818d190c4a119ea9a17

Authored by Perry Werneck
1 parent f54c89ab

Adding option to use syslog (when available).

@@ -463,6 +463,7 @@ dnl Check for headers @@ -463,6 +463,7 @@ dnl Check for headers
463 dnl --------------------------------------------------------------------------- 463 dnl ---------------------------------------------------------------------------
464 464
465 AC_CHECK_HEADER(malloc.h, AC_DEFINE(HAVE_MALLOC_H,,[do we have malloc.h?])) 465 AC_CHECK_HEADER(malloc.h, AC_DEFINE(HAVE_MALLOC_H,,[do we have malloc.h?]))
  466 +AC_CHECK_HEADER(syslog.h, AC_DEFINE(HAVE_SYSLOG,,[do we have malloc.h?]))
466 467
467 AC_CHECK_FUNCS(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO) ) 468 AC_CHECK_FUNCS(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO) )
468 AC_CHECK_FUNC(vasprintf, AC_DEFINE(HAVE_VASPRINTF) ) 469 AC_CHECK_FUNC(vasprintf, AC_DEFINE(HAVE_VASPRINTF) )
src/include/config.h.in
@@ -55,6 +55,7 @@ @@ -55,6 +55,7 @@
55 #undef HAVE_INET_NTOP 55 #undef HAVE_INET_NTOP
56 #undef HAVE_DBUS 56 #undef HAVE_DBUS
57 #undef HAVE_LIBCURL 57 #undef HAVE_LIBCURL
  58 + #undef HAVE_SYSLOG
58 59
59 #undef HAVE_ICONV 60 #undef HAVE_ICONV
60 #undef ICONV_CONST 61 #undef ICONV_CONST
src/include/lib3270/log.h
@@ -57,6 +57,16 @@ @@ -57,6 +57,16 @@
57 LIB3270_EXPORT int lib3270_write_rc(H3270 *session, const char *module, int rc, const char *fmt, ...) LIB3270_GNUC_FORMAT(4,5); 57 LIB3270_EXPORT int lib3270_write_rc(H3270 *session, const char *module, int rc, const char *fmt, ...) LIB3270_GNUC_FORMAT(4,5);
58 LIB3270_EXPORT void lib3270_write_va_log(H3270 *session, const char *module, const char *fmt, va_list arg); 58 LIB3270_EXPORT void lib3270_write_va_log(H3270 *session, const char *module, const char *fmt, va_list arg);
59 59
  60 + /**
  61 + * @brief Send logs to system log (if available)
  62 + *
  63 + * @param flag Non-zero to use syslog.
  64 + *
  65 + * @return 0 if ok, non zero if not.
  66 + *
  67 + */
  68 + LIB3270_EXPORT int lib3270_set_syslog(int flag);
  69 +
60 #ifdef DEBUG 70 #ifdef DEBUG
61 #include <stdio.h> 71 #include <stdio.h>
62 #undef trace 72 #undef trace
src/lib3270/init.c
@@ -54,6 +54,10 @@ @@ -54,6 +54,10 @@
54 #include <lib3270/log.h> 54 #include <lib3270/log.h>
55 #include "private.h" 55 #include "private.h"
56 56
  57 +#ifdef HAVE_SYSLOG
  58 + #include <syslog.h>
  59 +#endif // HAVE_SYSLOG
  60 +
57 #if defined WIN32 61 #if defined WIN32
58 BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd); 62 BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd);
59 #else 63 #else
@@ -118,6 +122,13 @@ int lib3270_unloaded(void) @@ -118,6 +122,13 @@ int lib3270_unloaded(void)
118 curl_global_cleanup(); 122 curl_global_cleanup();
119 #endif // HAVE_LIBCURL 123 #endif // HAVE_LIBCURL
120 124
  125 +#ifdef HAVE_SYSLOG
  126 + if(use_syslog)
  127 + {
  128 + closelog();
  129 + }
  130 +#endif // HAVE_SYSLOG
  131 +
121 return 0; 132 return 0;
122 } 133 }
123 134
src/lib3270/linux/log.c
@@ -34,13 +34,59 @@ @@ -34,13 +34,59 @@
34 #include <lib3270.h> 34 #include <lib3270.h>
35 #include <lib3270/log.h> 35 #include <lib3270/log.h>
36 36
  37 +#ifdef HAVE_SYSLOG
  38 + #include <syslog.h>
  39 +#endif // HAVE_SYSLOG
  40 +
37 /*---[ Implementacao ]--------------------------------------------------------------------------------------*/ 41 /*---[ Implementacao ]--------------------------------------------------------------------------------------*/
38 42
  43 + int use_syslog = 0;
  44 +
39 void default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int GNUC_UNUSED(rc), const char *fmt, va_list arg_ptr) 45 void default_log_writer(H3270 GNUC_UNUSED(*session), const char *module, int GNUC_UNUSED(rc), const char *fmt, va_list arg_ptr)
40 { 46 {
  47 +#ifdef HAVE_SYSLOG
  48 + if(use_syslog)
  49 + {
  50 + vsyslog(LOG_USER, fmt, arg_ptr);
  51 + }
  52 + else
  53 + {
  54 + printf("%s:\t",module);
  55 + vprintf(fmt,arg_ptr);
  56 + printf("\n");
  57 + fflush(stdout);
  58 + }
  59 +#else
41 printf("%s:\t",module); 60 printf("%s:\t",module);
42 vprintf(fmt,arg_ptr); 61 vprintf(fmt,arg_ptr);
43 printf("\n"); 62 printf("\n");
44 fflush(stdout); 63 fflush(stdout);
  64 +#endif
45 } 65 }
46 66
  67 + LIB3270_EXPORT int lib3270_set_syslog(int flag)
  68 + {
  69 +#ifdef HAVE_SYSLOG
  70 + if(flag)
  71 + {
  72 + if(!use_syslog)
  73 + {
  74 + openlog(LIB3270_STRINGIZE_VALUE_OF(LIB3270_NAME), LOG_NDELAY, LOG_USER);
  75 + use_syslog = 1;
  76 + }
  77 + }
  78 + else
  79 + {
  80 + if(use_syslog)
  81 + {
  82 + closelog();
  83 + use_syslog = 0;
  84 + }
  85 + }
  86 +
  87 + return 0;
  88 +
  89 +#else
  90 + return errno = ENOENT;
  91 +#endif // HAVE_SYSLOG
  92 + }
src/lib3270/log.c
@@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
41 #include <config.h> 41 #include <config.h>
42 #include <lib3270.h> 42 #include <lib3270.h>
43 #include <lib3270/log.h> 43 #include <lib3270/log.h>
  44 +#include <errno.h>
44 45
45 /*---[ Constants ]------------------------------------------------------------------------------------------*/ 46 /*---[ Constants ]------------------------------------------------------------------------------------------*/
46 47
@@ -75,3 +76,4 @@ @@ -75,3 +76,4 @@
75 { 76 {
76 loghandler(session,module,0,fmt,arg); 77 loghandler(session,module,0,fmt,arg);
77 } 78 }
  79 +
src/lib3270/private.h
@@ -691,6 +691,12 @@ struct _h3270 @@ -691,6 +691,12 @@ struct _h3270
691 LIB3270_INTERNAL HANDLE hEventLog; 691 LIB3270_INTERNAL HANDLE hEventLog;
692 #endif // _WIN32 692 #endif // _WIN32
693 693
  694 +#ifdef HAVE_SYSLOG
  695 +/// @brief Windows Event Log Handler.
  696 +LIB3270_INTERNAL int use_syslog;
  697 +#endif // HAVE_SYSLOG
  698 +
  699 +
694 /* Library internal calls */ 700 /* Library internal calls */
695 LIB3270_INTERNAL int key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); 701 LIB3270_INTERNAL int key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped);
696 LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); 702 LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr);
src/lib3270/windows/log.c
@@ -74,3 +74,8 @@ @@ -74,3 +74,8 @@
74 74
75 } 75 }
76 76
  77 + LIB3270_EXPORT int lib3270_set_syslog(int flag)
  78 + {
  79 + return errno = ENOENT;
  80 + }
  81 +