bool use_logger_by_default;
char logger_devices[LOG_ID_MAX][MAX_CONF_VAL_LEN];
int logger_device_throttling[LOG_ID_MAX];
+ struct reader_logger *logger_readers[LOG_ID_MAX];
} g_backend = {};
static const int DEFAULT_EPOLL_TIME_MS = 1000;
int read_fd = -1;
int r = logger_open_buffer(buf_id, config_list, O_RDONLY | O_NONBLOCK, &read_fd);
if (r <= 0)
- return -ENOENT;
+ return r;
init_fd_entity(&ret->common.fd_entity_sink, dispatch_event_reader_logger, ret);
init_fd_entity(&ret->common.fd_entity_source, dispatch_event_reader_logger, ret);
set_read_fd_entity(&ret->common.fd_entity_source, read_fd);
- r = add_fd_entity(&server->epoll_common, &ret->common.fd_entity_source);
- if (r < 0) {
- close(read_fd);
- return r;
- }
*reader = ret;
ret = NULL;
return get_dlogutil_params_from_argc_argv(argc, argv, params);
}
-static int create_reader_logger_from_dlogutil_line(struct dlogutil_line_params *params, struct logger *server, struct reader_logger **rd)
+static int create_logger_subreader_from_dlogutil_line(struct dlogutil_line_params *params)
{
- assert(server);
- assert(rd);
-
- __attribute__((cleanup(reader_logger_cleanup))) struct reader_logger *reader = NULL;
- int retval;
-
if (params->file_path) {
- retval = logfile_set_path(¶ms->file, params->file_path);
+ int retval = logfile_set_path(¶ms->file, params->file_path);
if (retval < 0)
return retval;
if (params->file.path == NULL)
return -EINVAL;
- retval = reader_logger_init(&reader, params->buf_id, server);
- if (retval != 0)
- return retval;
-
- retval = reader_logger_add_subreader_file(reader, params->filter, ¶ms->file);
- if (retval < 0)
- return retval;
-
- *rd = reader;
- reader = NULL;
+ struct reader_logger *const reader = g_backend.logger_readers[params->buf_id];
+ if (!reader)
+ return -ENOENT;
- return 0;
+ return reader_logger_add_subreader_file(reader, params->filter, ¶ms->file);
}
static int create_reader_pipe_from_dlogutil_line(struct dlogutil_line_params *params, struct logger *server, struct reader_pipe **rd)
l->buf_params = data->buf_params;
+ if (g_backend.use_logger_by_default)
+ for (log_id_t id = 0; id < LOG_ID_MAX; ++id) {
+ if (!is_core_buffer(id))
+ continue;
+
+ int r = reader_logger_init(g_backend.logger_readers + id, id, l);
+ if (r < 0)
+ return r;
+ if (!g_backend.logger_readers[id])
+ continue;
+
+ r = add_reader_logger(l, g_backend.logger_readers[id]);
+ if (r < 0)
+ return r;
+ }
+
for (log_id_t id = 0; id < LOG_ID_MAX; id++)
if (data->is_buffer_enabled[id]) {
int r = buffer_create(&l->buffers[id], id, data->buffers + id);
int r;
if (g_backend.use_logger_by_default && is_core_buffer(params.buf_id)) {
- struct reader_logger *reader = NULL;
- r = create_reader_logger_from_dlogutil_line(¶ms, server, &reader);
- if (r == 0)
- add_reader_logger(server, reader);
+ r = create_logger_subreader_from_dlogutil_line(¶ms);
} else {
struct reader_pipe *reader = NULL;
r = create_reader_pipe_from_dlogutil_line(¶ms, server, &reader);