Commit 7f7077f5566e11ee5ac98818d190c4a119ea9a17
1 parent
f54c89ab
Exists in
master
and in
3 other branches
Adding option to use syslog (when available).
Showing
8 changed files
with
82 additions
and
0 deletions
Show diff stats
configure.ac
@@ -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
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); |