X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fatalk%2Flogger.h;h=3f1396558487994a65792543ffc14322043ab74f;hb=3a84db87064922ad10ac10cc1d6833380e575995;hp=27e870cf1bc09531248383c7a0fb84c64a47796f;hpb=12400a59f246ccf0603efebdf11e17fd62329c50;p=netatalk.git diff --git a/include/atalk/logger.h b/include/atalk/logger.h index 27e870cf..3f139655 100644 --- a/include/atalk/logger.h +++ b/include/atalk/logger.h @@ -57,14 +57,16 @@ #include #include - -#include +#include #ifdef HAVE_CONFIG_H #include "config.h" #endif -#define MAXLOGSIZE 512 +/* logger is used by pam modules */ +#ifndef UAM_MODULE_EXPORT +#define UAM_MODULE_EXPORT +#endif enum loglevels { log_none, @@ -73,63 +75,28 @@ enum loglevels { log_warning, log_note, log_info, -#ifndef NO_DEBUG log_debug, log_debug6, log_debug7, log_debug8, log_debug9, log_maxdebug -#else -#define log_debug -1 -#define log_debug6 -1 -#define log_debug7 -1 -#define log_debug8 -1 -#define log_debug9 -1 -#define log_maxdebug -1 -#endif }; -#define LOGLEVEL_STRING_IDENTIFIERS { \ - "LOG_NOTHING", \ - "LOG_SEVERE", \ - "LOG_ERROR", \ - "LOG_WARN", \ - "LOG_NOTE", \ - "LOG_INFO", \ - "LOG_DEBUG", \ - "LOG_DEBUG6", \ - "LOG_DEBUG7", \ - "LOG_DEBUG8", \ - "LOG_DEBUG9", \ - "LOG_MAXDEBUG"} - /* this is the enum specifying all availiable logtypes */ enum logtypes { logtype_default, - logtype_core, logtype_logger, logtype_cnid, logtype_afpd, - logtype_atalkd, - logtype_papd, + logtype_dsi, logtype_uams, - + logtype_fce, + logtype_ad, + logtype_sl, logtype_end_of_list_marker /* don't put any logtypes after this */ }; -/* these are the string identifiers corresponding to each logtype */ -#define LOGTYPE_STRING_IDENTIFIERS { \ - "Default", \ - "Core", \ - "Logger", \ - "CNID", \ - "AFPDaemon", \ - "ATalkDaemon", \ - "PAPDaemon", \ - "UAMSDaemon", \ - \ - "end_of_list_marker"} \ /* Display Option flags. */ /* redefine these so they can don't interfeer with syslog */ @@ -161,68 +128,44 @@ enum logtypes { /* Main log config */ typedef struct { - int inited; /* file log config initialized ? */ - int filelogging; /* Any level set to filelogging ? */ - /* Deactivates syslog logging */ - char processname[16]; - int syslog_opened; /* syslog opened ? */ - int facility; /* syslog facility to use */ - int syslog_display_options; - int syslog_level; /* Log Level to send to syslog */ + bool inited; /* file log config initialized ? */ + bool syslog_opened; /* syslog opened ? */ + bool console; /* if logging to console from a cli util */ + char processname[16]; + int syslog_facility; + int syslog_display_options; } log_config_t; /* This stores the config and options for one filelog type (e.g. logger, afpd etc.) */ typedef struct { - int set; /* set individually ? yes: changing default - * doesnt change it. no: it changes it.*/ - char *filename; /* Name of file */ - int fd; /* logfiles fd */ - int level; /* Log Level to put in this file */ - int display_options; -} filelog_conf_t; + bool set; /* set individually ? yes: changing default + * doesnt change it. no: it changes it.*/ + bool syslog; /* This type logs to syslog */ + int fd; /* logfiles fd */ + enum loglevels level; /* Log Level to put in this file */ + int display_options; +} logtype_conf_t; + /* ========================================================================= Global variables - ========================================================================= */ + ========================================================================= */ -#ifndef LOGGER_C /* Make config accessible for LOG macro */ extern log_config_t log_config; -extern filelog_conf_t file_configs[logtype_end_of_list_marker]; -/* These are used by the LOG macro to store __FILE__ and __LINE__ */ -extern char *log_src_filename; -extern int log_src_linenumber; -#endif +extern UAM_MODULE_EXPORT logtype_conf_t type_configs[logtype_end_of_list_marker]; /* ========================================================================= Global function decarations ========================================================================= */ -/* */ -void log_init(void); - -/* Setup the level and type of log that will be logged for file loggging */ -void log_setup(const char *filename, enum loglevels loglevel, enum logtypes logtype); - -/* Setup the level and type of log that will be logged to syslog. */ -void syslog_setup(int loglevel, enum logtypes logtype, - int display_options, int facility); - -/* This gets called e.g. from afpd.conf parsing code with a string like: */ -/* "default log_maxdebug /var/log/afpd.log" */ -void setuplog(const char *logstr); - -/* This gets called e.g. from afpd.conf parsing code with a string like: */ -/* "default dummyname" */ -void unsetuplog(const char *logstr); - -/* finish up and close the logs */ -void log_close(void); - -/* This function sets up the ProcessName */ +void setuplog(const char *loglevel, const char *logfile); void set_processname(const char *processname); +/* LOG macro func no.1: log the message to file */ +UAM_MODULE_EXPORT void make_log_entry(enum loglevels loglevel, enum logtypes logtype, const char *file, int line, char *message, ...); + /* * How to write a LOG macro: * http://c-faq.com/cpp/debugmacs.html @@ -230,32 +173,27 @@ void set_processname(const char *processname); * We choose the verbose form in favor of the obfuscated ones, its easier * to parse for human beings and facilitates expanding the macro for * inline checks for debug levels. - * - * How to properly enclose multistatement macros: - * http://en.wikipedia.org/wiki/C_macro#Multiple_statements */ -/* LOG macro func no.1: log the message to file */ -void make_log_entry(enum loglevels loglevel, enum logtypes logtype, char *message, ...); +#define LOG_MAX log_info -/* LOG macro func no.2: log the message to syslog */ -void make_syslog_entry(enum loglevels loglevel, enum logtypes logtype, char *message, ...); +#ifdef NO_DEBUG + +#define LOG(log_level, type, ...) \ + do { \ + if (log_level <= LOG_MAX) \ + if (log_level <= type_configs[type].level) \ + make_log_entry((log_level), (type), __FILE__, __LINE__, __VA_ARGS__); \ + } while(0) + +#else /* ! NO_DEBUG */ + +#define LOG(log_level, type, ...) \ + do { \ + if (log_level <= type_configs[type].level) \ + make_log_entry((log_level), (type), __FILE__, __LINE__, __VA_ARGS__); \ + } while(0) + +#endif /* NO_DEBUG */ -/* - Note: - any configured file-logging deactivates syslog logging - */ -#define LOG(log_level, type, ...) \ - do { \ - if (log_level < 0) \ - break; \ - if ( ! log_config.inited) \ - log_init(); \ - if (file_configs[(type)].level >= (log_level)) \ - log_src_filename = __FILE__, \ - log_src_linenumber = __LINE__, \ - make_log_entry((log_level), (type), __VA_ARGS__); \ - else if (( ! log_config.filelogging) && (log_config.syslog_level >= (log_level))) \ - make_syslog_entry((log_level), (type), __VA_ARGS__); \ - } while(0) #endif /* _ATALK_LOGGER_H */