mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Add a callback log handler type
svn:r2658
This commit is contained in:
parent
4fdaa5de51
commit
11979dc1f5
@ -29,6 +29,7 @@ typedef struct logfile_t {
|
||||
int max_loglevel; /**< Highest severity level to send to this stream. */
|
||||
int is_temporary; /**< Boolean: close after initializing logging subsystem.*/
|
||||
int is_syslog; /**< Boolean: send messages to syslog. */
|
||||
log_callback callback; /**< If not num, send messages to this function. */
|
||||
} logfile_t;
|
||||
|
||||
/** Helper: map a log severity to descriptive string. */
|
||||
@ -156,7 +157,7 @@ logv(int severity, const char *funcname, const char *format, va_list ap)
|
||||
lf = lf->next;
|
||||
continue;
|
||||
}
|
||||
if (! (lf->file || lf->is_syslog)) {
|
||||
if (! (lf->file || lf->is_syslog || lf->callback)) {
|
||||
lf = lf->next;
|
||||
continue;
|
||||
}
|
||||
@ -172,6 +173,10 @@ logv(int severity, const char *funcname, const char *format, va_list ap)
|
||||
#endif
|
||||
lf = lf->next;
|
||||
continue;
|
||||
} else if (lf->callback) {
|
||||
lf->callback(severity, end_of_prefix);
|
||||
lf = lf->next;
|
||||
continue;
|
||||
}
|
||||
if(fputs(buf, lf->file) == EOF ||
|
||||
fflush(lf->file) == EOF) { /* error */
|
||||
@ -300,6 +305,19 @@ void add_temp_log(void)
|
||||
logfiles->is_temporary = 1;
|
||||
}
|
||||
|
||||
int add_callback_log(int loglevelMin, int loglevelMax, log_callback cb)
|
||||
{
|
||||
logfile_t *lf;
|
||||
lf = tor_malloc_zero(sizeof(logfile_t));
|
||||
lf->loglevel = loglevelMin;
|
||||
lf->max_loglevel = loglevelMax;
|
||||
lf->filename = tor_strdup("callback>");
|
||||
lf->callback = cb;
|
||||
lf->next = logfiles;
|
||||
logfiles = lf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Close any log handlers added by add_temp_log or marked by mark_logs_temp */
|
||||
void close_temp_logs(void)
|
||||
{
|
||||
|
@ -53,12 +53,15 @@
|
||||
#define LOG_ERR 3
|
||||
#endif
|
||||
|
||||
typedef void (*log_callback)(int severity, const char *msg);
|
||||
|
||||
int parse_log_level(const char *level);
|
||||
void add_stream_log(int severityMin, int severityMax, const char *name, FILE *stream);
|
||||
int add_file_log(int severityMin, int severityMax, const char *filename);
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
int add_syslog_log(int loglevelMin, int loglevelMax);
|
||||
#endif
|
||||
int add_callback_log(int loglevelMin, int loglevelMax, log_callback cb);
|
||||
int get_min_log_level(void);
|
||||
void close_logs(void);
|
||||
void reset_logs(void);
|
||||
|
Loading…
Reference in New Issue
Block a user