[logfile] fix issue when files have headers

Defect Number:
    Reviewed By:
   Testing Done:
pull/672/head
Timothy Stack 5 years ago
parent 3c85936999
commit 6cf5cc8213

@ -146,7 +146,8 @@ bool log_format::next_format(pcre_format *fmt, int &index, int &locked_index)
return retval;
}
const char *log_format::log_scanf(const char *line,
const char *log_format::log_scanf(uint32_t line_number,
const char *line,
size_t len,
pcre_format *fmt,
const char *time_fmt[],
@ -184,7 +185,15 @@ const char *log_format::log_scanf(const char *line,
if (retval) {
if (curr_fmt != pat_index) {
this->lf_pattern_locks.emplace_back(0, curr_fmt);
uint32_t lock_line;
if (this->lf_pattern_locks.empty()) {
lock_line = 0;
} else {
lock_line = line_number;
}
this->lf_pattern_locks.emplace_back(lock_line, curr_fmt);
}
this->lf_timestamp_flags = tm_out->et_flags;
done = true;
@ -672,8 +681,15 @@ log_format::scan_result_t external_log_format::scan(nonstd::optional<logfile *>
dst.emplace_back(offset, log_tv, level, mod_index, opid);
if (orig_lock != curr_fmt) {
uint32_t lock_line;
log_debug("changing pattern lock %d -> %d", orig_lock, curr_fmt);
this->lf_pattern_locks.emplace_back(dst.size() - 1, curr_fmt);
if (this->lf_pattern_locks.empty()) {
lock_line = 0;
} else {
lock_line = dst.size() - 1;
}
this->lf_pattern_locks.emplace_back(lock_line, curr_fmt);
}
return log_format::SCAN_MATCH;
}

@ -830,7 +830,8 @@ protected:
static bool next_format(pcre_format *fmt, int &index, int &locked_index);
const char *log_scanf(const char *line,
const char *log_scanf(uint32_t line_number,
const char *line,
size_t len,
pcre_format *fmt,
const char *time_fmt[],

@ -148,6 +148,7 @@ class generic_log_format : public log_format {
const char *last_pos;
if ((last_pos = this->log_scanf(
dst.size(),
sbr.get_data(),
sbr.length(),
get_pcre_log_formats(),

@ -227,6 +227,7 @@ dist_noinst_DATA = \
logfile_generic.0 \
logfile_generic.1 \
logfile_generic.2 \
logfile_generic_with_header.0 \
logfile_glog.0 \
logfile_haproxy.0 \
logfile_journald.json \
@ -247,6 +248,7 @@ dist_noinst_DATA = \
logfile_syslog.2 \
logfile_syslog_fr.0 \
logfile_syslog_with_access_log.0 \
logfile_syslog_with_header.0 \
logfile_syslog_with_mixed_times.0 \
logfile_tai64n.0 \
logfile_tcf.0 \

@ -0,0 +1,4 @@
Header1: abc
Header2: def
2012-07-02 10:22:40,672:DEBUG:foo bar baz
2014-10-08 16:56:38,344:WARN:foo bar baz

@ -0,0 +1,6 @@
Header1: abc
Header2: def
Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages

@ -378,6 +378,28 @@ count(*)
17
EOF
run_test ${lnav_test} -n \
${srcdir}/logfile_syslog_with_header.0
check_output "multi-pattern logs don't work?" <<EOF
Header1: abc
Header2: def
Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
EOF
run_test ${lnav_test} -n \
${srcdir}/logfile_generic_with_header.0
check_output "multi-pattern logs don't work?" <<EOF
Header1: abc
Header2: def
2012-07-02 10:22:40,672:DEBUG:foo bar baz
2014-10-08 16:56:38,344:WARN:foo bar baz
EOF
# XXX get this working...
# run_test ${lnav_test} -n -I ${test_dir} <(cat ${srcdir}/logfile_access_log.0)
#

Loading…
Cancel
Save