diff --git a/src/log_format.cc b/src/log_format.cc index 8a4d68fe..1384cd9f 100644 --- a/src/log_format.cc +++ b/src/log_format.cc @@ -99,7 +99,7 @@ logline::level_t logline::string2level(const char *levelstr, ssize_t len, bool e } if (((len == 1) || ((len > 1) && (levelstr[1] == ' '))) && - (retval = abbrev2level(levelstr, len)) != LEVEL_UNKNOWN) { + (retval = abbrev2level(levelstr, 1)) != LEVEL_UNKNOWN) { return retval; } @@ -107,7 +107,7 @@ logline::level_t logline::string2level(const char *levelstr, ssize_t len, bool e pcre_context_static<10> pc; if (LEVEL_RE.match(pc, pi)) { - retval = abbrev2level(pi.get_substr_start(pc.begin()), 1); + retval = abbrev2level(pi.get_substr_start(pc.begin()), len); } return retval; diff --git a/src/log_format_loader.cc b/src/log_format_loader.cc index 20c28643..4f27fff3 100644 --- a/src/log_format_loader.cc +++ b/src/log_format_loader.cc @@ -192,7 +192,6 @@ static int read_levels(yajlpp_parse_context *ypc, const unsigned char *str, size string regex = string((const char *)str, len); string level_name_or_number = ypc->get_path_fragment(2); logline::level_t level = logline::string2level(level_name_or_number.c_str()); - elf->elf_level_patterns[level].lp_regex = regex; return 1; diff --git a/test/Makefile.am b/test/Makefile.am index b15d7d87..804cd5f1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -274,6 +274,7 @@ dist_noinst_DATA = \ logfile_glog.0 \ logfile_json.json \ logfile_json2.json \ + logfile_leveltest.0 \ logfile_multiline.0 \ logfile_nested_json.json \ logfile_openam.0 \ @@ -306,6 +307,7 @@ dist_noinst_DATA = \ vt52_curses_output.0 \ vt52_curses_output.1 \ formats/collision/format.json \ + formats/customlevel/format.json \ formats/jsontest/format.json \ formats/jsontest2/format.json \ formats/nestedjson/format.json \ diff --git a/test/formats/customlevel/format.json b/test/formats/customlevel/format.json new file mode 100644 index 00000000..b777c508 --- /dev/null +++ b/test/formats/customlevel/format.json @@ -0,0 +1,24 @@ +{ + "leveltest_log": { + "description": "Log format used for testing levels", + "regex": { + "line": { + "pattern": "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) (?[^ ]+) (?.*)$" + } + }, + "level": { + "trace": "trace", + "debug": "debug", + "debug2": "debug2", + "debug3": "debug3", + "info": "info", + "warning": "warn", + "fatal": "fatal" + }, + "sample": [ + { + "line": "2016-06-30 12:00:01 trace tracemessage" + } + ] + } +} diff --git a/test/logfile_leveltest.0 b/test/logfile_leveltest.0 new file mode 100644 index 00000000..9105fb4b --- /dev/null +++ b/test/logfile_leveltest.0 @@ -0,0 +1,8 @@ +2016-06-30 12:00:01 trace tracemessage +2016-06-30 12:00:02 debug debugmessage +2016-06-30 12:00:03 debug2 debug2message +2016-06-30 12:00:04 debug3 debug3message +2016-06-30 12:00:05 info infomessage +2016-06-30 12:00:06 warn warnmessage +2016-06-30 12:00:07 fatal fatalmessage +2016-06-30 12:00:08 invalid invalidmessage diff --git a/test/test_format_loader.sh b/test/test_format_loader.sh index 019a0473..ccb5323d 100644 --- a/test/test_format_loader.sh +++ b/test/test_format_loader.sh @@ -20,3 +20,21 @@ error: against pattern -- ^(?\d+): (?.*)$ error:no_sample_log:no sample logs provided, all formats must have samples error:init.sql:2:near "TALE": syntax error EOF + +run_test ${lnav_test} -n \ + -I ${test_dir} \ + -c ";select * from leveltest_log" \ + -c ':write-csv-to -' \ + ${test_dir}/logfile_leveltest.0 + +check_output "levels are not correct?" <,2016-06-30 12:00:01.000,0,trace,0 +1,,2016-06-30 12:00:02.000,1000,debug,0 +2,,2016-06-30 12:00:03.000,1000,debug2,0 +3,,2016-06-30 12:00:04.000,1000,debug3,0 +4,,2016-06-30 12:00:05.000,1000,info,0 +5,,2016-06-30 12:00:06.000,1000,warning,0 +6,,2016-06-30 12:00:07.000,1000,fatal,0 +7,,2016-06-30 12:00:08.000,1000,info,0 +EOF