Fixes:
https://github.com/asalkeld/libqb/issues/28
Signed-off-by: Angus Salkeld <asalkeld(a)redhat.com>
---
lib/log_dcs.c | 4 +++-
tests/check_log.c | 20 ++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/lib/log_dcs.c b/lib/log_dcs.c
index 215252e..73ca2d8 100644
--- a/lib/log_dcs.c
+++ b/lib/log_dcs.c
@@ -128,6 +128,7 @@ qb_log_dcs_get(int32_t * newly_created,
assert(rc == 0);
if (csl_head->cs &&
format == csl_head->cs->format &&
+ priority == csl_head->cs->priority &&
strcmp(safe_filename, csl_head->cs->filename) == 0) {
return csl_head->cs;
}
@@ -145,7 +146,8 @@ qb_log_dcs_get(int32_t * newly_created,
for (csl = csl_head; csl; csl = csl->next) {
assert(csl->cs->lineno == lineno);
if (format == csl->cs->format &&
- strcmp(safe_filename, csl->cs->filename) == 0) {
+ priority == csl->cs->priority &&
+ strcmp(safe_filename, csl->cs->filename) == 0) {
cs = csl->cs;
break;
}
diff --git a/tests/check_log.c b/tests/check_log.c
index 751072d..b399c31 100644
--- a/tests/check_log.c
+++ b/tests/check_log.c
@@ -278,6 +278,26 @@ START_TEST(test_log_basic)
ck_assert_int_eq(num_msgs, 1);
ck_assert_str_eq(test_buf, "same filename/lineno");
+ /* check filtering works on same file/lineno but different
+ * log level.
+ */
+ qb_log_filter_ctl(t, QB_LOG_FILTER_CLEAR_ALL,
+ QB_LOG_FILTER_FILE, "*", LOG_DEBUG);
+ qb_log_filter_ctl(t, QB_LOG_FILTER_ADD,
+ QB_LOG_FILTER_FILE, __FILE__, LOG_INFO);
+
+ num_msgs = 0;
+ qb_log_from_external_source(__func__, __FILE__,
+ "same filename/lineno, this level %d",
+ LOG_INFO, 56, 0, LOG_INFO);
+ ck_assert_int_eq(num_msgs, 1);
+ ck_assert_str_eq(test_buf, "same filename/lineno, this level 6");
+
+ num_msgs = 0;
+ qb_log_from_external_source(__func__, __FILE__,
+ "same filename/lineno, this level %d",
+ LOG_DEBUG, 56, 0, LOG_DEBUG);
+ ck_assert_int_eq(num_msgs, 0);
}
END_TEST
--
1.7.7.5