4 Copyright (C) Andrew Tridgell 2008
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
21 #include "../include/ctdb_client.h"
22 #include "../include/ctdb_private.h"
23 #include "system/time.h"
24 #include "system/filesys.h"
25 #include "lib/util/time_basic.h"
27 #define CTDB_LOG_FILE_PREFIX "file"
34 log file logging function
36 static void ctdb_log_to_file(void *private_ptr, int dbglevel, const char *s)
38 struct file_state *state = talloc_get_type(
39 private_ptr, struct file_state);
41 struct timeval_buf tvbuf;
46 timeval_str_buf(&tv, false, true, &tvbuf);
48 ret = asprintf(&s2, "%s [%s%5u]: %s\n",
50 debug_extra, (unsigned)getpid(), s);
52 const char *errstr = "asprintf failed\n";
53 sys_write(state->fd, errstr, strlen(errstr));
57 sys_write(state->fd, s2, strlen(s2));
62 static int file_state_destructor(struct file_state *state)
69 static int ctdb_log_setup_file(TALLOC_CTX *mem_ctx,
73 struct file_state *state;
77 l = strlen(CTDB_LOG_FILE_PREFIX);
78 if (logging[l] != ':') {
81 logfile = &logging[0] + l + 1;
83 state = talloc_zero(mem_ctx, struct file_state);
88 if (logfile == NULL || strcmp(logfile, "-") == 0) {
92 /* also catch stderr of subcommands to stdout */
98 state->fd = open(logfile, O_WRONLY|O_APPEND|O_CREAT, 0666);
99 if (state->fd == -1) {
104 talloc_set_destructor(state, file_state_destructor);
105 debug_set_callback(state, ctdb_log_to_file);
110 void ctdb_log_init_file(void)
112 ctdb_log_register_backend(CTDB_LOG_FILE_PREFIX, ctdb_log_setup_file);