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 "system/time.h"
22 #include "system/filesys.h"
23 #include "system/network.h"
27 #include "lib/util/debug.h"
28 #include "lib/util/time_basic.h"
30 #include "ctdb_private.h"
31 #include "ctdb_client.h"
33 #include "common/system.h"
35 #define CTDB_LOG_FILE_PREFIX "file"
42 log file logging function
44 static void ctdb_log_to_file(void *private_ptr, int dbglevel, const char *s)
46 struct file_state *state = talloc_get_type(
47 private_ptr, struct file_state);
49 struct timeval_buf tvbuf;
54 timeval_str_buf(&tv, false, true, &tvbuf);
56 ret = asprintf(&s2, "%s [%s%5u]: %s\n",
58 debug_extra, (unsigned)getpid(), s);
60 const char *errstr = "asprintf failed\n";
61 sys_write(state->fd, errstr, strlen(errstr));
65 sys_write(state->fd, s2, strlen(s2));
70 static int file_state_destructor(struct file_state *state)
77 static int ctdb_log_setup_file(TALLOC_CTX *mem_ctx,
81 struct file_state *state;
85 l = strlen(CTDB_LOG_FILE_PREFIX);
86 if (logging[l] != ':') {
89 logfile = &logging[0] + l + 1;
91 state = talloc_zero(mem_ctx, struct file_state);
96 if (logfile == NULL || strcmp(logfile, "-") == 0) {
100 /* also catch stderr of subcommands to stdout */
106 state->fd = open(logfile, O_WRONLY|O_APPEND|O_CREAT, 0666);
107 if (state->fd == -1) {
112 talloc_set_destructor(state, file_state_destructor);
113 debug_set_callback(state, ctdb_log_to_file);
118 void ctdb_log_init_file(void)
120 ctdb_log_register_backend(CTDB_LOG_FILE_PREFIX, ctdb_log_setup_file);