mirror of
https://salsa.debian.org/ha-team/libqb
synced 2026-02-01 09:31:30 +00:00
LOG: add a way of getting the target state
This is so we can do the following:
for (t = 0; t < QB_LOG_TARGET_MAX; t++) {
if (qb_log_ctl(t, QB_LOG_CONF_STATE_GET, 0) == QB_LOG_STATE_ENABLED) {
// bla bla
}
}
Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
This commit is contained in:
parent
be8248bd50
commit
f5fcf2a30b
@ -349,6 +349,14 @@ void qb_log_from_external_source_va(const char *function,
|
||||
#define QB_LOG_STDERR 1
|
||||
#define QB_LOG_BLACKBOX 2
|
||||
|
||||
#define QB_LOG_TARGET_MAX 32
|
||||
|
||||
enum qb_log_target_state {
|
||||
QB_LOG_STATE_UNUSED = 1,
|
||||
QB_LOG_STATE_DISABLED = 2,
|
||||
QB_LOG_STATE_ENABLED = 3,
|
||||
};
|
||||
|
||||
enum qb_log_conf {
|
||||
QB_LOG_CONF_ENABLED,
|
||||
QB_LOG_CONF_FACILITY,
|
||||
@ -356,6 +364,7 @@ enum qb_log_conf {
|
||||
QB_LOG_CONF_SIZE,
|
||||
QB_LOG_CONF_THREADED,
|
||||
QB_LOG_CONF_PRIORITY_BUMP,
|
||||
QB_LOG_CONF_STATE_GET,
|
||||
};
|
||||
|
||||
enum qb_log_filter_type {
|
||||
@ -426,14 +435,16 @@ void qb_log_callsites_dump(void);
|
||||
/**
|
||||
* Main logging control function.
|
||||
*
|
||||
* @param t QB_LOG_SYSLOG, QB_LOG_STDERR or result from qb_log_file_open()
|
||||
* @param c what to configure
|
||||
* @param target QB_LOG_SYSLOG, QB_LOG_STDERR or result from qb_log_file_open()
|
||||
* @param conf_type what to configure
|
||||
* @param arg the new value
|
||||
* @see qb_log_conf
|
||||
*
|
||||
* @retval -errno on error
|
||||
* @retval 0 on success
|
||||
* @retval qb_log_target_state for QB_LOG_CONF_STATE_GET
|
||||
*/
|
||||
int32_t qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg);
|
||||
int32_t qb_log_ctl(int32_t target, enum qb_log_conf conf_type, int32_t arg);
|
||||
|
||||
/**
|
||||
* This allows you modify the 'tags' and 'targets' callsite fields at runtime.
|
||||
|
||||
26
lib/log.c
26
lib/log.c
@ -34,7 +34,7 @@
|
||||
#include "log_int.h"
|
||||
#include "util_int.h"
|
||||
|
||||
static struct qb_log_target conf[32];
|
||||
static struct qb_log_target conf[QB_LOG_TARGET_MAX];
|
||||
static uint32_t conf_used_max = 0;
|
||||
static uint32_t conf_active_max = 0;
|
||||
static int32_t in_logger = QB_FALSE;
|
||||
@ -526,7 +526,8 @@ qb_log_filter_ctl(int32_t t, enum qb_log_filter_conf c,
|
||||
if (!logger_inited) {
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
if (t < 0 || t >= QB_LOG_TARGET_MAX ||
|
||||
conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
return -EBADF;
|
||||
}
|
||||
if (text == NULL ||
|
||||
@ -590,7 +591,7 @@ done:
|
||||
#endif /* QB_HAVE_ATTRIBUTE_SECTION */
|
||||
|
||||
static void
|
||||
_log_target_state_set(struct qb_log_target *t, enum qb_log_state s)
|
||||
_log_target_state_set(struct qb_log_target *t, enum qb_log_target_state s)
|
||||
{
|
||||
int32_t i;
|
||||
int32_t a_set = QB_FALSE;
|
||||
@ -618,7 +619,7 @@ qb_log_init(const char *name, int32_t facility, uint8_t priority)
|
||||
i = pthread_rwlock_init(&_listlock, NULL);
|
||||
assert(i == 0);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
for (i = 0; i < QB_LOG_TARGET_MAX; i++) {
|
||||
conf[i].pos = i;
|
||||
conf[i].debug = QB_FALSE;
|
||||
conf[i].state = QB_LOG_STATE_UNUSED;
|
||||
@ -697,7 +698,7 @@ struct qb_log_target *
|
||||
qb_log_target_alloc(void)
|
||||
{
|
||||
int32_t i;
|
||||
for (i = 0; i < 32; i++) {
|
||||
for (i = 0; i < QB_LOG_TARGET_MAX; i++) {
|
||||
if (conf[i].state == QB_LOG_STATE_UNUSED) {
|
||||
_log_target_state_set(&conf[i], QB_LOG_STATE_DISABLED);
|
||||
return &conf[i];
|
||||
@ -730,7 +731,8 @@ qb_log_target_user_data_get(int32_t t)
|
||||
errno = -EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
if (t < 0 || t >= QB_LOG_TARGET_MAX ||
|
||||
conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
errno = -EBADF;
|
||||
return NULL;
|
||||
}
|
||||
@ -744,7 +746,8 @@ qb_log_target_user_data_set(int32_t t, void *user_data)
|
||||
if (!logger_inited) {
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
if (t < 0 || t >= QB_LOG_TARGET_MAX ||
|
||||
conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
return -EBADF;
|
||||
}
|
||||
|
||||
@ -783,7 +786,8 @@ qb_log_custom_close(int32_t t)
|
||||
if (!logger_inited) {
|
||||
return;
|
||||
}
|
||||
if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
if (t < 0 || t >= QB_LOG_TARGET_MAX ||
|
||||
conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -839,7 +843,8 @@ qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg)
|
||||
if (!logger_inited) {
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t < 0 || t >= 32 || conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
if (t < 0 || t >= QB_LOG_TARGET_MAX ||
|
||||
conf[t].state == QB_LOG_STATE_UNUSED) {
|
||||
return -EBADF;
|
||||
}
|
||||
switch (c) {
|
||||
@ -850,6 +855,9 @@ qb_log_ctl(int32_t t, enum qb_log_conf c, int32_t arg)
|
||||
_log_target_disable(&conf[t]);
|
||||
}
|
||||
break;
|
||||
case QB_LOG_CONF_STATE_GET:
|
||||
rc = conf[t].state;
|
||||
break;
|
||||
case QB_LOG_CONF_FACILITY:
|
||||
conf[t].facility = arg;
|
||||
if (t == QB_LOG_SYSLOG) {
|
||||
|
||||
@ -25,17 +25,11 @@
|
||||
#include <qb/qblog.h>
|
||||
#include <qb/qbrb.h>
|
||||
|
||||
enum qb_log_state {
|
||||
QB_LOG_STATE_UNUSED,
|
||||
QB_LOG_STATE_DISABLED,
|
||||
QB_LOG_STATE_ENABLED,
|
||||
};
|
||||
|
||||
struct qb_log_target;
|
||||
|
||||
struct qb_log_target {
|
||||
uint32_t pos;
|
||||
enum qb_log_state state;
|
||||
enum qb_log_target_state state;
|
||||
char name[PATH_MAX];
|
||||
struct qb_list_head filter_head;
|
||||
int32_t facility;
|
||||
|
||||
@ -311,9 +311,19 @@ END_TEST
|
||||
START_TEST(test_log_enable)
|
||||
{
|
||||
int32_t t;
|
||||
int32_t state;
|
||||
|
||||
qb_log_init("test", LOG_USER, LOG_DEBUG);
|
||||
state = qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_STATE_GET, 0);
|
||||
ck_assert_int_eq(state, QB_LOG_STATE_ENABLED);
|
||||
state = qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_STATE_GET, 0);
|
||||
ck_assert_int_eq(state, QB_LOG_STATE_DISABLED);
|
||||
state = qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_STATE_GET, 0);
|
||||
ck_assert_int_eq(state, QB_LOG_STATE_DISABLED);
|
||||
|
||||
qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
|
||||
state = qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_STATE_GET, 0);
|
||||
ck_assert_int_eq(state, QB_LOG_STATE_DISABLED);
|
||||
|
||||
t = qb_log_custom_open(_test_logger, NULL, NULL, NULL);
|
||||
qb_log_ctl(t, QB_LOG_CONF_ENABLED, QB_TRUE);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user