From 3086c394de1ddae3ca1bf2e8c315b235a4c70321 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 25 Aug 2010 19:10:50 +0200 Subject: logging: add log target logging into text file and log target destroy function --- src/logging.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/logging.c b/src/logging.c index fe782a67..5be4e58e 100644 --- a/src/logging.c +++ b/src/logging.c @@ -348,6 +348,56 @@ struct log_target *log_target_create_stderr(void) #endif /* stderr */ } +struct log_target *log_target_create_file(const char *fname) +{ + struct log_target *target; + + target = log_target_create(); + if (!target) + return NULL; + + target->tgt_file.out = fopen(fname, "a"); + if (!target->tgt_file.out) + return NULL; + + target->output = _file_output; + + target->tgt_file.fname = talloc_strdup(target, fname); + + return target; +} + +void log_target_destroy(struct log_target *target) +{ + + /* just in case, to make sure we don't have any references */ + log_del_target(target); + + if (target->output == &_file_output) { + /* don't close stderr */ + if (target->tgt_file.out != stderr) { + fclose(target->tgt_file.out); + target->tgt_file.out = NULL; + } + } + + talloc_free(target); +} + +/* close and re-open a log file (for log file rotation) */ +int log_target_file_reopen(struct log_target *target) +{ + fclose(target->tgt_file.out); + + target->tgt_file.out = fopen(target->tgt_file.fname, "a"); + if (!target->tgt_file.out) + return -errno; + + /* we assume target->output already to be set */ + + return 0; +} + const char *log_vty_level_string(struct log_info *info) { const struct value_string *vs; -- cgit v1.2.3